/[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.9 - (hide annotations) (download)
Sat Apr 1 14:41:33 2006 UTC (19 years, 3 months ago) by wakaba
Branch: MAIN
Changes since 1.8: +3 -2 lines
++ manakai/t/ChangeLog	1 Apr 2006 09:28:43 -0000
2006-04-01  Wakaba  <wakaba@suika.fam.cx>

	* Makefile (util-dis-DPG.t): New test.

	* Makefile (dom-XML.t): New test.
	* Makefile (dom-TreeCore.t): New test.
++ manakai/bin/ChangeLog	1 Apr 2006 08:52:15 -0000
2006-04-01  Wakaba  <wakaba@suika.fam.cx>

	* daf.pl (perl-pm, daf_generate_perl_test): Sets
	the |$Message::Util::DIS::Perl::Implementation| variable
	for compatibility.

++ manakai/lib/Message/Util/ChangeLog	1 Apr 2006 11:55:12 -0000
2006-04-01  Wakaba  <wakaba@suika.fam.cx>

	* Grove.dis (destroy): Threshold value changed to 4096.

	* PerlCode.dis (PerlCode): Associated as the default
	class with |pc:*| and |pc2:*| element types.
	(currentPackage, currentChunkNumber, getNextChunkNumber): Removed.
	(ReflectCDATA): Reimplemented using standard |Element|
	methods.
	(sourceFile, sourceLine, currentSourceFile, currentSourceLine,
	skipLines): Removed.
	(pc:line): Removed.
	(stringify): Support for the |pc:line| configuration
	parameter is removed.

	* DIS.dis (isFeatureProvided): Removed.

++ manakai/lib/Message/Util/DIS/ChangeLog	1 Apr 2006 09:24:59 -0000
2006-04-01  Wakaba  <wakaba@suika.fam.cx>

	* Perl.dis (plImplementation): Get the instance
	from the |$Message::Util::DIS::Perl::Implementation| variable.
	(plIsFeatureImplemented): Removed.
	(plPreprocessPerlCode, plPreprocessPerlStatement): The |sourceFile|
	and |sourceLine| parameters are removed.

	* DPG.dis (DPGElement): Associated to the |pg:*| element types.

++ manakai/lib/Message/DOM/ChangeLog	1 Apr 2006 11:35:47 -0000
	* DOMFeature.dis (getImplementation, getImplementationList): Support
	for new class information variables.
	(DOMLS:Generic): This old feature name is removed.

	* GenericLS.dis (createGLSParser, createGLSSerializer): Support
	for new class information variables.

	* TreeCore.dis (manakaiExpandedURI): New attribute.
	(Document, Element.___create_node_ref): New method
	implementations.

2006-04-01  Wakaba  <wakaba@suika.fam.cx>

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.9 $Date: 2006/03/31 16:44:25 $
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 wakaba 1.9 > (defined $Message::Util::Grove::GCLatency
499     ? $Message::Util::Grove::GCLatency : 4096)) {
500 wakaba 1.1 __CODE{mg|collectGarbage:: $ref => $self}__;
501     }
502     }
503    
504     @CODE:
505     @@QName: mg|collectGarbage
506     @@enDesc:
507     Garbage collection.
508     @@Param:
509     @@@Name: ref
510     @@@Type: HASH
511     @@@enDesc:
512     The node reference object.
513     @@PerlDef:
514     my $bag = $ref->{<H::mg|nodeBag>};
515     my @target = @{$bag->{<H::mg|mutations>}};
516     my %done;
517     my %has_xref;
518     TARGET: while (@target) {
519     my $target = shift @target;
520    
521     next TARGET if $has_xref{$$target} or $done{$$target};
522    
523     unless (defined $bag->{$$target}) {
524     $done{$$target} = true;
525     next TARGET;
526     }
527    
528 wakaba 1.3 my %grove;
529 wakaba 1.1 my @gtarget = ($target);
530     my @gwreferred;
531     GTARGET: while (@gtarget) {
532     my $gtarget = shift @gtarget;
533 wakaba 1.3 next GTARGET if $grove{$$gtarget};
534    
535 wakaba 1.1 my $gtstem = $bag->{$$gtarget};
536     unless (defined $gtstem) {
537     $done{$$gtarget} = true;
538     next GTARGET;
539     }
540    
541     if ($has_xref{$$gtarget} or $gtstem->{<H::mg|references>}) {
542     $has_xref{$$gtarget} = true;
543 wakaba 1.3 $has_xref{$_} = true for keys %grove;
544 wakaba 1.1 for (@gtarget) {
545     $has_xref{$$_} = defined $bag->{$$_};
546     $done{$$_} = true;
547     }
548     next TARGET;
549     } elsif ($done{$$gtarget}) {
550     next GTARGET;
551     }
552    
553     my $clsprop = $Message::Util::Grove::ClassProp{
554 wakaba 1.2 ${$gtstem->{<H::mg|nodeClass>}}
555 wakaba 1.1 };
556    
557     for my $key (@{$clsprop->{<H::mg|origin0>}}) {
558     push @gtarget, $gtstem->{$key} if ref $gtstem->{$key};
559     }
560    
561     A: for my $key ((@{$clsprop->{<H::mg|ownee1h>}}),
562     (@{$clsprop->{<H::mg|subnode1h>}})) {
563     next A unless ref $gtstem->{$key};
564     push @gtarget, grep {ref $_} values %{$gtstem->{$key}};
565     }
566    
567     A: for my $key (@{$clsprop->{<H::mg|subnode1a>}}) {
568     next A unless ref $gtstem->{$key};
569     push @gtarget, grep {ref $_} @{$gtstem->{$key}};
570     }
571    
572     A: for my $key (@{$clsprop->{<H::mg|subnode2hh>}}) {
573     next A unless ref $gtstem->{$key};
574     B: for my $key2 (keys %{$gtstem->{$key}}) {
575     next B unless ref $gtstem->{$key}->{$key2};
576     push @gtarget, grep {ref $_} values %{$gtstem->{$key}->{$key2}};
577     }
578     }
579    
580     for my $key (@{$clsprop->{<H::mg|owner0>}}) {
581     push @gwreferred, $gtstem->{$key} if ref $gtstem->{$key};
582     }
583    
584 wakaba 1.3 $grove{$$gtarget} = true;
585 wakaba 1.1 } # GTARGET
586    
587 wakaba 1.3 for (keys %grove) {
588     $done{$_} = true;
589 wakaba 1.8 if (defined $bag->{$_}->{<H::mg|onunload>}) {
590     $bag->{$_}->{<H::mg|onunload>}->($bag, \$_);
591     }
592 wakaba 1.3 delete $bag->{$_};
593 wakaba 1.1 }
594     push @target, @gwreferred;
595     } # TARGET
596     $bag->{<H::mg|mutations>} = [];
597 wakaba 1.2
598     @CODE:
599     @@QName: mg|getNodeStemPropValue
600     @@enDesc:
601     Obtains a property value set to the node stem associated
602     to the node reference.
603     @@PerlDef:
604     $r = $ref->{<H::mg|nodeBag>}->{${$ref->{<H::mg|nodeIDReference>}}}
605     ->{$prop};
606    
607     @CODE:
608 wakaba 1.3 @@QName: mg|getNodeStemPropValueRef
609     @@enDesc:
610     Obtains the reference to a property value set to the node stem associated
611     to the node reference.
612     @@PerlDef:
613     $r = \$ref->{<H::mg|nodeBag>}->{${$ref->{<H::mg|nodeIDReference>}}}
614     ->{$prop};
615    
616     @CODE:
617 wakaba 1.4 @@QName: mg|get++NodeStemPropValue
618     @@enDesc:
619     Obtains a property value set to the node stem associated
620     to the node reference and then increments the value.
621     @@PerlDef:
622     $r = $ref->{<H::mg|nodeBag>}->{${$ref->{<H::mg|nodeIDReference>}}}
623     ->{$prop}++;
624    
625     @CODE:
626 wakaba 1.2 @@QName: mg|setNodeStemPropValue
627     @@enDesc:
628     Sets a property value to the node stem associated
629     to the node reference.
630     @@PerlDef:
631     $ref->{<H::mg|nodeBag>}->{${$ref->{<H::mg|nodeIDReference>}}}
632     ->{$prop} = $given;
633 wakaba 1.4
634     @CODE:
635     @@QName: mg|orSetNodeStemPropValue
636     @@enDesc:
637     Sets a property value to the node stem associated
638     to the node reference by <Perl::||=> operator.
639     @@PerlDef:
640     $ref->{<H::mg|nodeBag>}->{${$ref->{<H::mg|nodeIDReference>}}}
641     ->{$prop} ||= $given;
642 wakaba 1.2
643     @CODE:
644     @@QName: mg|getNodeStemProp0Node
645     @@enDesc:
646     Obtains a property value node reference set to the node stem associated
647     to the node reference.
648     @@PerlDef:
649     my $__v = $ref->{<H::mg|nodeBag>}->{${$ref->{<H::mg|nodeIDReference>}}}
650     ->{$prop};
651     if (defined $__v) {
652     __CODE{mg|createNodeRefFromID||ManakaiDOM|all::
653     $bag => {$ref->{<H::mg|nodeBag>}},
654     $stemid => $__v,
655     $ref => $r,
656 wakaba 1.7 $opt => $opt,
657 wakaba 1.2 }__;
658     }
659 wakaba 1.3
660     @CODE:
661     @@QName: mg|setNodeStemProp0Node
662     @@enDesc:
663     Sets a property value node to the node stem associated
664     to the node reference.
665     @@PerlDef:
666     $ref->{<H::mg|nodeBag>}->{${$ref->{<H::mg|nodeIDReference>}}}
667     ->{$prop} = $given->{<H::mg|nodeIDReference>};
668    
669     @CODE:
670     @@QName: mg|deleteNodeStemPropValue
671     @@enDesc:
672     Deletes a property value node from the node stem associated
673     to the node reference.
674     @@PerlDef:
675     CORE::delete $ref->{<H::mg|nodeBag>}->{${$ref->{<H::mg|nodeIDReference>}}}
676     ->{$prop};
677    
678     @Code:
679     @@QName: mg|nodeIDMatch
680     @@enDesc:
681     Whether a node reference references the same node
682     as a reference to a node identifier.
683     @@PerlDef:
684     (${$noderef->{<H::mg|nodeIDReference>}} eq ${$nodeid})
685 wakaba 1.5
686     @CODE:
687     @@QName: mg|getNodeRefPropValue
688     @@enDesc:
689     Obtains a property value set to the node reference.
690     @@PerlDef:
691     $r = $ref->{$prop};
692    
693     @CODE:
694     @@QName: mg|setNodeRefPropValue
695     @@enDesc:
696     Sets a property value set to the node reference.
697     @@PerlDef:
698     $ref->{$prop} = $given;
699 wakaba 1.1 ##NodeRef
700    
701     ## -- Reference Internal Properties
702    
703     RPropDef:
704     @QName: mg|nodeRefKey
705     @subsetOf: DISPerl|propHashKey
706     @multipleProperties: DISCore|Single
707     @dataType: DISCore|String
708    
709     IntPropDef:
710     @QName: mg|nodeIDReference
711     @enDesc:
712     The <Q::mg|nodeID> of the node referenced by the node reference object.
713     @Type: DISPerl|SCALAR
714     @mg:nodeRefKey: id
715    
716     IntPropDef:
717     @QName: mg|nodeBag
718     @enDesc:
719     The node bag object referenced by the node reference object.
720     @Type: DISPerl|Ref
721     @mg:nodeRefKey: b
722 wakaba 1.6
723     ## -- Other Property Names for Options
724    
725     IntPropDef:
726     @QName: mg|nodeRefClass
727     @mg:nodeStemKey: nrcls
728     @enDesc:
729     The Perl package name of the class of the node reference.
730 wakaba 1.7
731     IntPropDef:
732     @QName: mg|nodeRefInterfaces
733     @mg:nodeStemKey: nrifs
734     @enDesc:
735     A reference to the array that contains the Perl
736     package names of the interfaces that the node reference
737     should implement.

admin@suikawiki.org
ViewVC Help
Powered by ViewVC 1.1.24