/[suikacvs]/messaging/manakai/lib/Message/Util/Grove.dis
Suika

Contents of /messaging/manakai/lib/Message/Util/Grove.dis

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.8 - (hide annotations) (download)
Fri Mar 31 16:44:25 2006 UTC (19 years, 3 months ago) by wakaba
Branch: MAIN
Changes since 1.7: +27 -1 lines
++ manakai/lib/Message/ChangeLog	31 Mar 2006 15:51:53 -0000
2006-03-31  Wakaba  <wakaba@suika.fam.cx>

	* Makefile (clean-db): New rule.

++ manakai/lib/Message/Markup/ChangeLog	31 Mar 2006 15:53:04 -0000
2006-03-31  Wakaba  <wakaba@suika.fam.cx>

	* Makefile (clean-db): New rule.

++ manakai/lib/Message/Util/ChangeLog	31 Mar 2006 15:59:50 -0000
	* Makefile (clean-db): New rule.

	* Grove.dis (onunload): New internal property.
	(collectGarbage): Invoke the |mg:onunload| code if available.

2006-03-31  Wakaba  <wakaba@suika.fam.cx>

++ manakai/lib/Message/DOM/ChangeLog	31 Mar 2006 15:58:33 -0000
2006-04-01  Wakaba  <wakaba@suika.fam.cx>

	* TreeCore.dis (setIdAttribute, setIdAttributeNS, setIdAttributeNode):
	Reimplemented.
	(isId): Setter is added.
	(Element.normalize): Definition copied from the |MDOM:Tree|
	module.

2006-03-31  Wakaba  <wakaba@suika.fam.cx>

	* Makefile (clean-db): New rule.

	* TreeCore.dis (setUserData): Schedule to invoke
	the user data handler when the node is removed
	from the memory.
	(setAttribute, setAttributeNS): Set the [attribute type]
	if DTD attribute definition is available.
	(CharacterData members): Definitions copied from
	the |MDOM:Tree| module.

++ manakai/lib/Message/URI/ChangeLog	31 Mar 2006 15:54:48 -0000
2006-04-01  Wakaba  <wakaba@suika.fam.cx>

	* Makefile (clean-db): New rule.

++ manakai/lib/Message/Charset/ChangeLog	31 Mar 2006 15:54:37 -0000
2006-04-01  Wakaba  <wakaba@suika.fam.cx>

	* Makefile (clean-db): New rule.

++ manakai/lib/manakai/ChangeLog	31 Mar 2006 15:53:40 -0000
2006-03-31  Wakaba  <wakaba@suika.fam.cx>

	* Makefile (clean-db): New rule.

++ manakai/lib/ChangeLog	31 Mar 2006 15:51:40 -0000
2006-03-31  Wakaba  <wakaba@suika.fam.cx>

	* Makefile (clean-db): New rule.

1 wakaba 1.1 Module:
2     @QName: Util|Grove
3     @enFN:
4     Manakai Grove Module
5    
6     @Namespace:
7     http://suika.fam.cx/~wakaba/archive/2005/manakai/Util/Grove/
8    
9     @DISCore:author: DISCore|Wakaba
10     @License: license|Perl+MPL
11     @Date:
12 wakaba 1.8 $Date: 2006/03/31 12:15:40 $
13 wakaba 1.1
14     @Require:
15     @@Module:
16     @@@QName: DISlib|DISPerl
17     @DefaultFor: ManakaiDOM|all
18    
19     Namespace:
20     @dis:
21     http://suika.fam.cx/~wakaba/archive/2004/8/18/lang#dis--
22     @DISlib:
23     http://suika.fam.cx/~wakaba/archive/2004/dis/
24     @f:
25     http://suika.fam.cx/~wakaba/archive/2004/dom/feature#
26     @fe:
27     http://suika.fam.cx/www/2006/feature/
28     @idl:
29     http://suika.fam.cx/~wakaba/archive/2004/dis/IDL#
30     @kwd:
31     http://suika.fam.cx/~wakaba/archive/2005/rfc2119/
32     @lang:
33     http://suika.fam.cx/~wakaba/archive/2004/8/18/lang#
34     @license:
35     http://suika.fam.cx/~wakaba/archive/2004/8/18/license#
36     @ManakaiDOM:
37     http://suika.fam.cx/~wakaba/archive/2004/8/18/manakai-dom#
38     @mg:
39     http://suika.fam.cx/~wakaba/archive/2005/manakai/Util/Grove/
40     @test:
41     http://suika.fam.cx/~wakaba/archive/2004/dis/Test#
42     @Util:
43     http://suika.fam.cx/~wakaba/archive/2005/manakai/Util/
44    
45     ElementTypeBinding:
46     @Name: ClsDef
47     @ElementType:
48     dis:ResourceDef
49     @ShadowContent:
50     @@DISCore:resourceType: DISLang|Class
51    
52     ElementTypeBinding:
53     @Name: CODE
54     @ElementType:
55     dis:ResourceDef
56     @ShadowContent:
57     @@DISCore:resourceType: DISPerl|BlockCode
58    
59     ElementTypeBinding:
60     @Name: Method
61     @ElementType:
62     dis:ResourceDef
63     @ShadowContent:
64     @@DISCore:resourceType: DISLang|Method
65    
66     ElementTypeBinding:
67     @Name: Param
68     @ElementType:
69     dis:ResourceDef
70     @ShadowContent:
71     @@DISCore:resourceType: DISLang|MethodParameter
72    
73     ElementTypeBinding:
74     @Name: Return
75     @ElementType:
76     dis:ResourceDef
77     @ShadowContent:
78     @@DISCore:resourceType: DISLang|MethodReturn
79    
80     ElementTypeBinding:
81     @Name: nullCase
82     @ElementType:
83     dis:ResourceDef
84     @ShadowContent:
85     @@DISCore:resourceType:
86     ManakaiDOM:InCase
87     @@Value:
88     @@@is-null:1
89    
90     ElementTypeBinding:
91     @Name: PerlDef
92     @ElementType:
93     dis:Def
94     @ShadowContent:
95     @@ContentType:
96     lang:Perl
97    
98     ElementTypeBinding:
99     @Name: enDesc
100     @ElementType:
101     dis:Description
102     @ShadowContent:
103     @@lang:en
104    
105     ElementTypeBinding:
106     @Name: enImplNote
107     @ElementType:
108     dis:ImplNote
109     @ShadowContent:
110     @@lang:en
111    
112     ElementTypeBinding:
113     @Name: enFN
114     @ElementType:
115     dis:FullName
116     @ShadowContent:
117     @@lang:en
118    
119     ElementTypeBinding:
120     @Name: ClsQName
121     @ElementType:
122     dis:QName
123    
124     ElementTypeBinding:
125     @Name: Code
126     @ElementType:
127     dis:ResourceDef
128     @ShadowContent:
129     @@DISCore:resourceType: DISPerl|InlineCode
130    
131     ElementTypeBinding:
132     @Name: IntPropDef
133     @ElementType:
134     dis:ResourceDef
135     @ShadowContent:
136     @@DISCore:resourceType: DISCore|Property
137    
138     ElementTypeBinding:
139     @Name: RPropDef
140     @ElementType:
141     dis:ResourceDef
142     @ShadowContent:
143     @@DISCore:resourceType: DISSource|ResourceProperty
144    
145     ElementTypeBinding:
146     @Name: Test
147     @ElementType:
148     dis:ResourceDef
149     @ShadowContent:
150     @@DISCore:resourceType: test|StandaloneTest
151    
152     ResourceDef:
153     @QName: HASH
154     @AliasFor: DISPerl|HASH||ManakaiDOM|all
155    
156     ## --------------------------------
157     ## --- Node Bag
158    
159     ClsDef:
160     @ClsQName: NodeBag
161    
162     @CODE:
163     @@QName: mg|createNodeBag
164     @@enDesc:
165     Creates a new node bag.
166     @@PerlDef:
167     $bag = {
168     <H::mg|mutations> => [],
169     };
170     ##NodeBag
171    
172     ## -- Bag Internal Properties
173    
174     RPropDef:
175     @QName: mg|nodeBagKey
176     @subsetOf: DISPerl|propHashKey
177     @multipleProperties: DISCore|Single
178     @dataType: DISCore|String
179    
180     IntPropDef:
181     @QName: mg|mutations
182     @mg:nodeBagKey: m
183     @enDesc:
184     The <Q::mg|mutations> property of a node bag contains
185     a reference to the array that contains references to
186     the node identifiers. They should be identifiers
187     of nodes that might be no longer referenced from anywhere
188     other than bag and when garbage collection procedure is
189     invoked they are really no longer referenced or not.
190    
191     ## --------------------------------
192     ## --- Node Stem
193    
194     ClsDef:
195     @ClsQName: NodeStem
196    
197     @CODE:
198     @@QName: mg|createNodeStem
199     @@enDesc:
200     Creates a new node stem.
201     @@PerlDef:
202     $stem = $class->___create_node_stem ($bag, {
203     <H::mg|references> => 0,
204     <H::mg|nodeID> => \<Code::mg|generateUniqueID>,
205     }, $opt);
206 wakaba 1.2 __CODE{DISPerl|HashStringRef||ManakaiDOM|all::
207     $result => {$stem->{<H::mg|nodeClass>}},
208     $given => {$class},
209     }__;
210 wakaba 1.1 $bag->{${$stem->{<H::mg|nodeID>}}} = $stem;
211    
212     @Code:
213     @@QName: mg|generateUniqueID
214     @@PerlDef:
215     (
216     'tag:suika.fam.cx,2005-09:' . time . ':' . $$ . ':' .
217     ($Message::Util::ManakaiNode::UniqueIDR ||=
218     [qw/A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
219     a b c d e f g h i j k l m n o p q r s t u v w x y z
220     0 1 2 3 4 5 6 7 8 9/]->[rand 62] .
221     [qw/A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
222     a b c d e f g h i j k l m n o p q r s t u v w x y z
223     0 1 2 3 4 5 6 7 8 9/]->[rand 62] .
224     [qw/A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
225     a b c d e f g h i j k l m n o p q r s t u v w x y z
226     0 1 2 3 4 5 6 7 8 9/]->[rand 62] .
227     [qw/A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
228     a b c d e f g h i j k l m n o p q r s t u v w x y z
229     0 1 2 3 4 5 6 7 8 9/]->[rand 62] .
230     [qw/A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
231     a b c d e f g h i j k l m n o p q r s t u v w x y z
232     0 1 2 3 4 5 6 7 8 9/]->[rand 62]) .
233     (++$Message::Util::ManakaiNode::UniqueIDN)
234     )
235    
236     @CODE:
237     @@QName: mg|setOwnerProp
238     @@enDesc:
239     Setting <Q::mg|owner0> and <Q::mg|ownee1h> property values.
240     @@PerlDef:
241     $ownee->{$owner0prop} = $ownerref->{<H::mg|nodeIDReference>};
242     $bag->{${$ownerref->{<H::mg|nodeIDReference>}}}
243     ->{$ownee1hprop}->{${$ownee->{<H::mg|nodeID>}}}
244     = $ownee->{<H::mg|nodeID>};
245 wakaba 1.6
246     @CODE:
247     @@QName: mg|setOwnerPropRR
248     @@enDesc:
249     Setting <Q::mg|owner0> and <Q::mg|ownee1h> property values
250     (node reference to node reference).
251     @@PerlDef:
252     $bag->{${$owneeref->{<H::mg|nodeIDReference>}}}->{$owner0prop}
253     = $ownerref->{<H::mg|nodeIDReference>};
254     $bag->{${$ownerref->{<H::mg|nodeIDReference>}}}
255     ->{$ownee1hprop}->{${$owneeref->{<H::mg|nodeIDReference>}}}
256     = $owneeref->{<H::mg|nodeIDReference>};
257    
258     @CODE:
259     @@QName: mg|deleteOwnerProp
260     @@enDesc:
261     Deletes <Q::mg|owner0> and <Q::mg|ownee1h> property values.
262     @@PerlDef:
263     CORE::delete $bag->{${$bag->{${$owneeref->{<H::mg|nodeIDReference>}}}
264     ->{$owner0prop} or \''}}
265     ->{$ownee1hprop};
266     push @{$bag->{<H::mg|mutations>}},
267     $bag->{${$owneeref->{<H::mg|nodeIDReference>}}}->{$owner0prop};
268     CORE::delete $bag->{${$owneeref->{<H::mg|nodeIDReference>}}}
269     ->{$owner0prop};
270 wakaba 1.1 ##NodeStem
271    
272    
273     ## -- Stem Internal Property Types
274    
275     RPropDef:
276     @QName: mg|propertyTypeKey
277     @subsetOf: DISPerl|propHashKey
278    
279     PTPropDef:
280     @QName: mg|subnode0
281     @enDesc:
282     A subnode property.
283     @mg:propertyTypeKey: s0
284    
285     PTPropDef:
286     @QName: mg|subnode1a
287     @enDesc:
288     A subnode property containing an array reference.
289     @mg:propertyTypeKey: s1a
290    
291     PTPropDef:
292     @QName: mg|subnode1h
293     @enDesc:
294     A subnode property containing a hash reference.
295     @mg:propertyTypeKey: s1h
296    
297     PTPropDef:
298     @QName: mg|subnode2hh
299     @enDesc:
300     A subnode property containing a hash reference
301     containing hash references.
302     @mg:propertyTypeKey: s2hh
303    
304     PTPropDef:
305     @QName: mg|origin0
306     @enDesc:
307     An origin property.
308     @mg:propertyTypeKey: o0
309    
310     PTPropDef:
311     @QName: mg|owner0
312     @enDesc:
313     An owner property. It is <EM::not> traversed when garbage collection is
314     done.
315     @mg:propertyTypeKey: w0
316    
317     PTPropDef:
318     @QName: mg|ownee1h
319     @enDesc:
320     An ownee property. It <EM::is> traversed when garvage collection is done.
321     @mg:propertyTypeKey: v1h
322    
323     ElementTypeBinding:
324     @Name: PTPropDef
325     @ElementType:
326     dis:ResourceDef
327     @ShadowContent:
328     @@DISCore:resourceType: DISSource|ResourceProperty
329     @@multipleProperties: DISCore|UnorderedList
330     @@dataType: DISCore|QName
331    
332     ## -- Stem Internal Properties
333    
334     RPropDef:
335     @QName: mg|nodeStemKey
336     @subsetOf: DISPerl|propHashKey
337     @multipleProperties: DISCore|Single
338     @dataType: DISCore|String
339    
340     IntPropDef:
341     @QName: mg|references
342     @enDesc:
343     The number of the external references to the node.
344     @Type: DISPerl|Number
345     @mg:nodeStemKey: rc
346    
347     IntPropDef:
348     @QName: mg|nodeClass
349     @enDesc:
350     The Perl fully-qualified package name of the class
351     whose <CODE::___create_node_ref> method is invoked when
352     a reference to the node is instantiated.
353     @Type: DISPerl|String
354     @mg:nodeStemKey: cls
355    
356     IntPropDef:
357     @QName: mg|nodeID
358     @enDesc:
359     The hash key string by which the node stem object can
360     be retrieved from the node bag.
361     @Type: DISPerl|SCALAR
362     @mg:nodeStemKey: id
363    
364 wakaba 1.8 IntPropDef:
365     @QName: mg|onunload
366     @enDesc:
367     The code that is executed just before the node stem
368     is deleted from the node bag. Applications <kwd:MUST-NOT>
369     rely on the code being executed. Exactly when it
370     is executed is undefined. However, at the time of the
371     execution, the node stem is still accessible from
372     the node bag.
373    
374     The code would receive two parameters: the node bag
375     and a reference to the node identifier. The code
376     <kwd:MUST-NOT> modify the node identifier. The code
377     <kwd:MUST-NOT> modify the node bag directly (neither
378     by hand nor by code fragments defined in this module); if
379     it does, the result is undefined. The code <kwd:MAY>
380     modify the node bag indirectly, via other node references,
381     since the referenced nodes should never part of the grove
382     being removed if there is such node reference.
383    
384     The code <kwd:MUST-NOT> throw exceptions; if it does, result is undefined.
385     @Type: DISPerl|CODE
386     @mg:nodeStemKey: beforefree
387 wakaba 1.1
388     ## --------------------------------
389     ## --- Node Reference
390    
391     ClsDef:
392     @ClsQName: NodeRef
393    
394     @ResourceDef:
395     @@QName: mg|NodeRefRole
396     @@DISCore:resourceType: DISLang|Role
397     @@enDesc:
398     Any class that is used as a node reference <kwd:MUST> set
399     its <Q::DISLang|role> property as <Q::mg|NodeRefRole>.
400    
401     @ResourceDef:
402     @@QName: mg|CreateNodeStemMethod
403     @@DISCore:resourceType: DISPerl|CommonMethod
404     @@enDesc:
405     The method to create a node stem.
406    
407     The method will invoked with four parameters: class name, node bag,
408     node stem prototype, and a reference to hash containing
409     optional parameters. The method <kwd:MUST> return a node
410     stem object. It <kwd:MAY> create and return the node
411     stem optionally by <Perl::bless>ing the node stem prototype
412     parameter with any appropriate class, or <kwd:MAY> create and
413     return the node stem object by its own way. It
414     <kwd:MAY> use options contained by the third parameter
415     to create the node stem object.
416    
417     @CODE:
418     @@QName: mg|createNodeRef
419     @@enDesc:
420     Creates a new node reference for the node stem.
421     @@PerlDef:
422 wakaba 1.2 $ref = ${$stem->{<H::mg|nodeClass>}}->___create_node_ref ({
423 wakaba 1.1 <H::mg|nodeIDReference> => $stem->{<H::mg|nodeID>},
424     <H::mg|nodeBag> => $bag,
425     }, $opt);
426     $stem->{<H::mg|references>}++;
427    
428 wakaba 1.2 @CODE:
429     @@QName: mg|createNodeRefFromID
430     @@enDesc:
431     Creates a new node reference for the node stem.
432     @@PerlDef:
433 wakaba 1.3 $ref = ${$bag->{${$stemid}}->{<H::mg|nodeClass>}}->___create_node_ref ({
434 wakaba 1.2 <H::mg|nodeIDReference> => $stemid,
435     <H::mg|nodeBag> => $bag,
436     }, $opt);
437 wakaba 1.3 $bag->{${$stemid}}->{<H::mg|references>}++;
438 wakaba 1.2
439 wakaba 1.6 @Code:
440     @@QName: mg|createNodeRefHashFromID
441     @@enDesc:
442     Creates a node reference hash, which is a hash reference
443     that can be handled as if it were a node reference,
444     from a node bag by its node identifier.
445     @@PerlDef:
446     {
447     <H::mg|nodeIDReference> => $stemid,
448     <H::mg|nodeBag> => $bag,
449     }
450    
451 wakaba 1.1 @ResourceDef:
452     @@QName: mg|CreateNodeRefMethod
453     @@DISCore:resourceType: DISPerl|CommonMethod
454     @@enDesc:
455     The method to create a node reference to the node.
456    
457     The method will invoked with three parameters: class name,
458     node reference prototype, and a reference to hash containing
459     optional parameters. The method <kwd:MUST> return a node
460     reference object. It <kwd:MAY> create and return the node
461     reference by <Perl::bless>ing the node reference prototype
462     parameter with any appropriate class, or <kwd:MAY> create and
463     return the node reference object by its own way. It
464     <kwd:MAY> use options contained by the third parameter
465     to create the node reference object.
466    
467     @Code:
468     @@QName: mg|getNodeBag
469     @@enDesc:
470 wakaba 1.3 Returns the node bag to which the node stem referenced by
471     a node reference belongs.
472 wakaba 1.1 @@PerlDef:
473     $ref->{<H::mg|nodeBag>}
474    
475 wakaba 1.3 @Code:
476     @@QName: mg|getNodeID
477     @@enDesc:
478     Returns the identifier of the node referenced by a node reference.
479     @@PerlDef:
480     $ref->{<H::mg|nodeIDReference>}
481    
482     @Code:
483     @@QName: mg|getNodeStem
484     @@enDesc:
485     Returns the node stem referenced by a node reference.
486     @@PerlDef:
487     $ref->{<H::mg|nodeBag>}->{${$ref->{<H::mg|nodeIDReference>}}}
488    
489 wakaba 1.1 @Method:
490     @@Name: destroy
491     @@Return:
492     @@@PerlDef:
493     my $id = $self->{<H::mg|nodeIDReference>};
494     my $bag = $self->{<H::mg|nodeBag>};
495     if (--$bag->{$$id}->{<H::mg|references>} < 1) {
496     push @{$bag->{<H::mg|mutations>}}, $id;
497     if (@{$bag->{<H::mg|mutations>}}
498     > ($Message::Util::Grove::GCLatency or 0)) {
499     __CODE{mg|collectGarbage:: $ref => $self}__;
500     }
501     }
502    
503     @CODE:
504     @@QName: mg|collectGarbage
505     @@enDesc:
506     Garbage collection.
507     @@Param:
508     @@@Name: ref
509     @@@Type: HASH
510     @@@enDesc:
511     The node reference object.
512     @@PerlDef:
513     my $bag = $ref->{<H::mg|nodeBag>};
514     my @target = @{$bag->{<H::mg|mutations>}};
515     my %done;
516     my %has_xref;
517     TARGET: while (@target) {
518     my $target = shift @target;
519    
520     next TARGET if $has_xref{$$target} or $done{$$target};
521    
522     unless (defined $bag->{$$target}) {
523     $done{$$target} = true;
524     next TARGET;
525     }
526    
527 wakaba 1.3 my %grove;
528 wakaba 1.1 my @gtarget = ($target);
529     my @gwreferred;
530     GTARGET: while (@gtarget) {
531     my $gtarget = shift @gtarget;
532 wakaba 1.3 next GTARGET if $grove{$$gtarget};
533    
534 wakaba 1.1 my $gtstem = $bag->{$$gtarget};
535     unless (defined $gtstem) {
536     $done{$$gtarget} = true;
537     next GTARGET;
538     }
539    
540     if ($has_xref{$$gtarget} or $gtstem->{<H::mg|references>}) {
541     $has_xref{$$gtarget} = true;
542 wakaba 1.3 $has_xref{$_} = true for keys %grove;
543 wakaba 1.1 for (@gtarget) {
544     $has_xref{$$_} = defined $bag->{$$_};
545     $done{$$_} = true;
546     }
547     next TARGET;
548     } elsif ($done{$$gtarget}) {
549     next GTARGET;
550     }
551    
552     my $clsprop = $Message::Util::Grove::ClassProp{
553 wakaba 1.2 ${$gtstem->{<H::mg|nodeClass>}}
554 wakaba 1.1 };
555    
556     for my $key (@{$clsprop->{<H::mg|origin0>}}) {
557     push @gtarget, $gtstem->{$key} if ref $gtstem->{$key};
558     }
559    
560     A: for my $key ((@{$clsprop->{<H::mg|ownee1h>}}),
561     (@{$clsprop->{<H::mg|subnode1h>}})) {
562     next A unless ref $gtstem->{$key};
563     push @gtarget, grep {ref $_} values %{$gtstem->{$key}};
564     }
565    
566     A: for my $key (@{$clsprop->{<H::mg|subnode1a>}}) {
567     next A unless ref $gtstem->{$key};
568     push @gtarget, grep {ref $_} @{$gtstem->{$key}};
569     }
570    
571     A: for my $key (@{$clsprop->{<H::mg|subnode2hh>}}) {
572     next A unless ref $gtstem->{$key};
573     B: for my $key2 (keys %{$gtstem->{$key}}) {
574     next B unless ref $gtstem->{$key}->{$key2};
575     push @gtarget, grep {ref $_} values %{$gtstem->{$key}->{$key2}};
576     }
577     }
578    
579     for my $key (@{$clsprop->{<H::mg|owner0>}}) {
580     push @gwreferred, $gtstem->{$key} if ref $gtstem->{$key};
581     }
582    
583 wakaba 1.3 $grove{$$gtarget} = true;
584 wakaba 1.1 } # GTARGET
585    
586 wakaba 1.3 for (keys %grove) {
587     $done{$_} = true;
588 wakaba 1.8 if (defined $bag->{$_}->{<H::mg|onunload>}) {
589     $bag->{$_}->{<H::mg|onunload>}->($bag, \$_);
590     }
591 wakaba 1.3 delete $bag->{$_};
592 wakaba 1.1 }
593     push @target, @gwreferred;
594     } # TARGET
595     $bag->{<H::mg|mutations>} = [];
596 wakaba 1.2
597     @CODE:
598     @@QName: mg|getNodeStemPropValue
599     @@enDesc:
600     Obtains a property value set to the node stem associated
601     to the node reference.
602     @@PerlDef:
603     $r = $ref->{<H::mg|nodeBag>}->{${$ref->{<H::mg|nodeIDReference>}}}
604     ->{$prop};
605    
606     @CODE:
607 wakaba 1.3 @@QName: mg|getNodeStemPropValueRef
608     @@enDesc:
609     Obtains the reference to a property value set to the node stem associated
610     to the node reference.
611     @@PerlDef:
612     $r = \$ref->{<H::mg|nodeBag>}->{${$ref->{<H::mg|nodeIDReference>}}}
613     ->{$prop};
614    
615     @CODE:
616 wakaba 1.4 @@QName: mg|get++NodeStemPropValue
617     @@enDesc:
618     Obtains a property value set to the node stem associated
619     to the node reference and then increments the value.
620     @@PerlDef:
621     $r = $ref->{<H::mg|nodeBag>}->{${$ref->{<H::mg|nodeIDReference>}}}
622     ->{$prop}++;
623    
624     @CODE:
625 wakaba 1.2 @@QName: mg|setNodeStemPropValue
626     @@enDesc:
627     Sets a property value to the node stem associated
628     to the node reference.
629     @@PerlDef:
630     $ref->{<H::mg|nodeBag>}->{${$ref->{<H::mg|nodeIDReference>}}}
631     ->{$prop} = $given;
632 wakaba 1.4
633     @CODE:
634     @@QName: mg|orSetNodeStemPropValue
635     @@enDesc:
636     Sets a property value to the node stem associated
637     to the node reference by <Perl::||=> operator.
638     @@PerlDef:
639     $ref->{<H::mg|nodeBag>}->{${$ref->{<H::mg|nodeIDReference>}}}
640     ->{$prop} ||= $given;
641 wakaba 1.2
642     @CODE:
643     @@QName: mg|getNodeStemProp0Node
644     @@enDesc:
645     Obtains a property value node reference set to the node stem associated
646     to the node reference.
647     @@PerlDef:
648     my $__v = $ref->{<H::mg|nodeBag>}->{${$ref->{<H::mg|nodeIDReference>}}}
649     ->{$prop};
650     if (defined $__v) {
651     __CODE{mg|createNodeRefFromID||ManakaiDOM|all::
652     $bag => {$ref->{<H::mg|nodeBag>}},
653     $stemid => $__v,
654     $ref => $r,
655 wakaba 1.7 $opt => $opt,
656 wakaba 1.2 }__;
657     }
658 wakaba 1.3
659     @CODE:
660     @@QName: mg|setNodeStemProp0Node
661     @@enDesc:
662     Sets a property value node to the node stem associated
663     to the node reference.
664     @@PerlDef:
665     $ref->{<H::mg|nodeBag>}->{${$ref->{<H::mg|nodeIDReference>}}}
666     ->{$prop} = $given->{<H::mg|nodeIDReference>};
667    
668     @CODE:
669     @@QName: mg|deleteNodeStemPropValue
670     @@enDesc:
671     Deletes a property value node from the node stem associated
672     to the node reference.
673     @@PerlDef:
674     CORE::delete $ref->{<H::mg|nodeBag>}->{${$ref->{<H::mg|nodeIDReference>}}}
675     ->{$prop};
676    
677     @Code:
678     @@QName: mg|nodeIDMatch
679     @@enDesc:
680     Whether a node reference references the same node
681     as a reference to a node identifier.
682     @@PerlDef:
683     (${$noderef->{<H::mg|nodeIDReference>}} eq ${$nodeid})
684 wakaba 1.5
685     @CODE:
686     @@QName: mg|getNodeRefPropValue
687     @@enDesc:
688     Obtains a property value set to the node reference.
689     @@PerlDef:
690     $r = $ref->{$prop};
691    
692     @CODE:
693     @@QName: mg|setNodeRefPropValue
694     @@enDesc:
695     Sets a property value set to the node reference.
696     @@PerlDef:
697     $ref->{$prop} = $given;
698 wakaba 1.1 ##NodeRef
699    
700     ## -- Reference Internal Properties
701    
702     RPropDef:
703     @QName: mg|nodeRefKey
704     @subsetOf: DISPerl|propHashKey
705     @multipleProperties: DISCore|Single
706     @dataType: DISCore|String
707    
708     IntPropDef:
709     @QName: mg|nodeIDReference
710     @enDesc:
711     The <Q::mg|nodeID> of the node referenced by the node reference object.
712     @Type: DISPerl|SCALAR
713     @mg:nodeRefKey: id
714    
715     IntPropDef:
716     @QName: mg|nodeBag
717     @enDesc:
718     The node bag object referenced by the node reference object.
719     @Type: DISPerl|Ref
720     @mg:nodeRefKey: b
721 wakaba 1.6
722     ## -- Other Property Names for Options
723    
724     IntPropDef:
725     @QName: mg|nodeRefClass
726     @mg:nodeStemKey: nrcls
727     @enDesc:
728     The Perl package name of the class of the node reference.
729 wakaba 1.7
730     IntPropDef:
731     @QName: mg|nodeRefInterfaces
732     @mg:nodeStemKey: nrifs
733     @enDesc:
734     A reference to the array that contains the Perl
735     package names of the interfaces that the node reference
736     should implement.

admin@suikawiki.org
ViewVC Help
Powered by ViewVC 1.1.24