root/branches/Carsten_PtrWork2/Tools/fcd2code/TemplateFieldContainerBase_cpp.txt

Revision 1072, 53.7 kB (checked in by cneumann, 9 months ago)

replaced pointer field implementation
split FieldContainer/Fields? directory into Base and Handle subdir

Status: - ref counting seems to work (mt, cluster)

  • new OSB loader works (well, the unittest does)
  • VRML loader is deactivated
  • get/edit handle for dynamic (pointer) fields missing
  • need to remove some more old files - they get moved in this commit
  • generated (i.e. base) code in following commit
  • Property svn:eol-style set to native
Line 
1 /*---------------------------------------------------------------------------*\
2  *                                OpenSG                                     *
3  *                                                                           *
4  *                                                                           *
5  *               Copyright (C) 2000-2006 by the OpenSG Forum                 *
6  *                                                                           *
7  *                            www.opensg.org                                 *
8  *                                                                           *
9  *   contact: dirk@opensg.org, gerrit.voss@vossg.org, jbehr@zgdv.de          *
10  *                                                                           *
11 \*---------------------------------------------------------------------------*/
12 /*---------------------------------------------------------------------------*\
13  *                                License                                    *
14  *                                                                           *
15  * This library is free software; you can redistribute it and/or modify it   *
16  * under the terms of the GNU Library General Public License as published    *
17  * by the Free Software Foundation, version 2.                               *
18  *                                                                           *
19  * This library is distributed in the hope that it will be useful, but       *
20  * WITHOUT ANY WARRANTY; without even the implied warranty of                *
21  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU         *
22  * Library General Public License for more details.                          *
23  *                                                                           *
24  * You should have received a copy of the GNU Library General Public         *
25  * License along with this library; if not, write to the Free Software       *
26  * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.                 *
27  *                                                                           *
28 \*---------------------------------------------------------------------------*/
29 /*---------------------------------------------------------------------------*\
30  *                                Changes                                    *
31  *                                                                           *
32  *                                                                           *
33  *                                                                           *
34  *                                                                           *
35  *                                                                           *
36  *                                                                           *
37 \*---------------------------------------------------------------------------*/
38
39 /*****************************************************************************\
40  *****************************************************************************
41  **                                                                         **
42  **                  This file is automatically generated.                  **
43  **                                                                         **
44  **          Any changes made to this file WILL be lost when it is          **
45  **           regenerated, which can become necessary at any time.          **
46  **                                                                         **
47  **     Do not change this file, changes should be done in the derived      **
48  **     class @!Classname!@!
49  **                                                                         **
50  *****************************************************************************
51 \*****************************************************************************/
52
53
54 #define OSG_COMPILE@!CLASSNAME!@INST
55
56 #include <cstdlib>
57 #include <cstdio>
58 #include <boost/assign/list_of.hpp>
59 #include <boost/bind.hpp>
60
61 #include <@!HeaderPrefix!@OSGConfig.h>
62
63 @@AdditionalIncludes@@
64
65 @@BeginFieldLoop@@
66     @@if @!field.hasDefaultHeader!@
67 #include @!field.DefaultHeader:30!@   // @!field.Name!@ default header
68     @@endif // field.hasDefaultHeader
69 @@EndFieldLoop@@
70
71 @@BeginFieldLoop@@
72     @@if @!field.category!@ == "pointer"
73         @@if @!field.needClassInclude!@
74 #include <@!field.ClassInclude!@> // @!field.Name!@ Class
75         @@endif // @!field.category!@ == "pointer"
76     @@endif // field.needClassInclude
77 @@EndFieldLoop@@
78
79 #include "OSG@!Classname!@Base.h"
80 #include "OSG@!Classname!@.h"
81
82
83 OSG_BEGIN_NAMESPACE
84
85 /***************************************************************************\
86  *                            Description                                  *
87 \***************************************************************************/
88
89 /*! \class OSG::@!Classname!@
90     @!Description!@
91  */
92
93 @@if @!hasFields!@
94 /***************************************************************************\
95  *                         Field Description                               *
96 \***************************************************************************/
97
98     @@if @!isDecorator!@
99 /*! \var @!Parent!@Ptr @!Classname!@Base::_sfDecoratee
100     The object being decorated
101 */
102     @@else // isDecorator
103         @@BeginFieldLoop@@
104 /*! \var @!field.Type:15!@ @!Classname!@Base::@!field.VarName!@
105     @!field.Description!@
106 */
107
108         @@EndFieldLoop@@
109     @@endif // isDecorator
110 @@endif // @!hasFields!@
111    
112 void @!Classname!@Base::classDescInserter(TypeObject &oType)
113 {
114     FieldDescriptionBase *pDesc = NULL;
115
116 @@if @!hasMixinParent!@
117     Inherited::classDescInserter(oType);
118
119 @@endif // @!hasMixinParent!@
120 @@if @!isDecorator!@
121     pDesc = new SF@!Parent!@UnrecPtr::Description(
122         SF@!Parent!@UnrecPtr::getClassType(),
123         "decoratee",
124         "undocumented decoratee",
125         DecorateeFieldId, DecorateeFieldMask,
126         true,
127         @!DecorateeFieldFlags!@,
128         static_cast<FieldEditMethodSig>(&@!Classname!@Base::editHandleDecoratee),
129         static_cast<FieldGetMethodSig >(&@!Classname!@Base::getHandleDecoratee ));
130
131     oType.addInitialDesc(pDesc);
132 @@else // @!isDecorator!@
133     @@BeginFieldLoop@@
134     pDesc = new @!field.FieldTypeNS!@@!field.CARD!@@!field.FieldTypeCaps!@::Description(
135         @!field.FieldTypeNS!@@!field.CARD!@@!field.FieldTypeCaps!@::getClassType(),
136         "@!field.DescName!@",
137         @!field.SafeDescription!@,
138         @!field.Name!@FieldId,
139         @!field.Name!@FieldMask,
140         @!field.Visibility!@,
141         @!field.Flags!@,
142         @@if @!field.access!@ == "none" or (@!field.category!@ == "pointer" and @!field.pointertype!@ == "parent")
143         static_cast<FieldEditMethodSig>(&@!Classname!@Base::invalidEditField),
144         static_cast<FieldGetMethodSig >(&@!Classname!@Base::invalidGetField ) );
145         @@else
146         static_cast<FieldEditMethodSig>(&@!Classname!@Base::editHandle@!field.Name!@),
147         static_cast<FieldGetMethodSig >(&@!Classname!@Base::getHandle@!field.Name!@ ) );
148         @@endif // @!field.access!@ == "none" or (@!field.category!@ == "pointer" and @!field.pointertype!@ == "parent")
149        
150         oType.addInitialDesc(pDesc);
151        
152        
153     @@EndFieldLoop@@
154 @@endif // isDecorator
155 }
156
157 @!Classname!@Base::TypeObject @!Classname!@Base::_type(
158     @!Classname!@Base::getClassname(),
159     Inherited::getClassname(),
160     "@!Group!@",
161     @!Namespace!@,
162 @@if @!isAbstract!@
163     NULL,
164 @@else // isAbstract
165     (PrototypeCreateF) &@!Classname!@Base::createEmpty,
166 @@endif // isAbstract
167     @!Classname!@::initMethod,
168 @@if @!hasFields!@
169     (InitalInsertDescFunc) &@!Classname!@Base::classDescInserter,
170 @@else // hasFields
171     NULL,
172 @@endif // hasFields
173     false,
174     @!FieldsUnmarkedOnCreate!@,
175     @!Fcdxml!@,
176     @!SafeDescription!@
177     );
178    
179 /*------------------------------ get -----------------------------------*/
180
181 FieldContainerType &
182 @!Classname!@Base::getType(void)
183 {
184     return _type;
185 }
186
187 FieldContainerType const &
188 @!Classname!@Base::getType(void) const
189 {
190     return _type;
191 }
192
193 UInt32
194 @!Classname!@Base::getContainerSize(void) const
195 {
196     return sizeof(@!Classname!@);
197 }
198
199 @@if not @!isDecorator!@   
200     @@BeginMFFieldLoop@@
201         @@if @!field.access!@ != "none"
202 /*-------------------------------------------------------------------------*/
203 /* Field @!field.CARD!@@!field.Name:63!@ */
204             @@if @!field.category!@ == "pointer" and @!field.pointertype!@ != "parent"      // POINTER MField functions
205                 @@if @!field.writePushToField!@
206 void
207 @!Classname!@Base::@!field.PushToField!@(@!field.FieldTypeNS!@@!field.CARD!@@!field.FieldTypeCaps!@::ArgumentType value)
208 {
209                     @@if @!field.checkNilPtr!@
210     if(value == NullFC)
211         return;
212
213                     @@endif // field.checkNilPtr
214     editMField(@!field.Name!@FieldMask, @!field.VarName!@);
215
216     @!field.VarName!@.push_back(value);
217 }
218
219                 @@endif // field.writePushToField
220                 @@if @!field.writeAssignMField!@
221 void
222 @!Classname!@Base::@!field.AssignMField!@(@!field.FieldTypeNS!@@!field.CARD!@@!field.FieldTypeCaps!@ const &value)
223 {
224     editMField(@!field.Name!@FieldMask, @!field.VarName!@);
225
226     @!field.VarName!@.setValues(value);
227 }
228
229                 @@endif // field.writeAssignMField
230                 @@if @!field.writeInsertIntoMField!@
231 void
232 @!Classname!@Base::@!field.InsertIntoMField!@(
233     UInt32 const uiIndex,
234     @!field.FieldTypeNS!@@!field.CARD!@@!field.FieldTypeCaps!@::ArgumentType value)
235 {
236                     @@if @!field.checkNilPtr!@
237     if(value == NullFC)
238         return;
239
240                     @@endif // field.checkNilPtr
241     editMField(@!field.Name!@FieldMask, @!field.VarName!@);
242
243     @!field.Name!@FieldType::iterator fieldIt = @!field.VarName!@.begin();
244
245     fieldIt += uiIndex;
246
247     @!field.VarName!@.insert(fieldIt, value);
248 }
249
250                 @@endif // field.writeInsertIntoMField
251                 @@if @!field.writeReplaceInMFieldIndex!@
252 void
253 @!Classname!@Base::@!field.ReplaceInMFieldIndex!@(
254     UInt32 const uiIndex,
255     @!field.FieldTypeNS!@@!field.CARD!@@!field.FieldTypeCaps!@::ArgumentType value)
256 {
257                     @@if @!field.checkNilPtr!@
258     if(value == NullFC)
259         return;
260
261                     @@endif // field.checkNilPtr
262     if(uiIndex >= @!field.VarName!@.size())
263         return;
264
265     editMField(@!field.Name!@FieldMask, @!field.VarName!@);
266
267     @!field.VarName!@[uiIndex] = value;
268 }
269
270                 @@endif // field.writeReplaceInMFieldIndex
271                 @@if @!field.writeReplaceInMFieldObject!@
272 bool
273 @!Classname!@Base::@!field.ReplaceInMFieldObject!@(
274     @!field.FieldTypeNS!@@!field.CARD!@@!field.FieldTypeCaps!@::ArgumentType pOldElem,
275     @!field.FieldTypeNS!@@!field.CARD!@@!field.FieldTypeCaps!@::ArgumentType pNewElem )
276 {
277     bool retVal = false;
278
279                     @@if @!field.checkNilPtr!@
280     if(pNewElem == NullFC)
281         return retVal;
282
283                     @@endif // field.checkNilPtr
284     @!field.Name!@FieldType::iterator fieldIt =
285         @!field.VarName!@.find(pOldElem);
286    
287     if(fieldIt != @!field.VarName!@.end())
288     {
289         retVal = true;
290    
291         editMField(@!field.Name!@FieldMask, @!field.VarName!@);
292        
293         (*fieldIt) = @!field.TypeNS!@@!field.Type!@(pNewElem);
294     }
295    
296     return retVal;
297 }
298
299                 @@endif // field.writeReplaceInMFieldObject
300                 @@if @!field.writeRemoveFromMFieldIndex!@
301 void
302 @!Classname!@Base::@!field.RemoveFromMFieldIndex!@(UInt32 const uiIndex)
303 {
304     if(uiIndex < @!field.VarName!@.size())
305     {
306         editMField(@!field.Name!@FieldMask, @!field.VarName!@);
307
308         @!field.Name!@FieldType::iterator fieldIt = @!field.VarName!@.begin();
309
310         fieldIt += uiIndex;
311
312                     @@if @!field.hasTombstoneValue!@
313         (*fieldIt) = @!field.tombstoneValue!@;
314                     @@else // @!field.hasTombstoneValue!@
315         @!field.VarName!@.erase(fieldIt);
316                     @@endif // @!field.hasTombstoneValue!@
317     }
318 }
319
320                 @@endif // field.writeRemoveFromMFieldIndex
321                 @@if @!field.writeRemoveFromMFieldObject!@
322 bool
323 @!Classname!@Base::@!field.RemoveFromMFieldObject!@(
324     @!field.FieldTypeNS!@@!field.CARD!@@!field.FieldTypeCaps!@::ArgumentType value)
325 {
326     bool retVal = false;
327     @!field.Name!@FieldType::iterator fieldIt =
328         @!field.VarName!@.find(value);
329        
330     if(fieldIt != @!field.VarName!@.end())
331     {
332         retVal = true;
333    
334         editMField(@!field.Name!@FieldMask, @!field.VarName!@);
335        
336                     @@if @!field.hasTombstoneValue!@
337         (*fieldIt) = @!field.tombstoneValue!@;
338                     @@else // @!field.hasTombstoneValue!@
339         @!field.VarName!@.erase(fieldIt);
340                     @@endif // @!field.hasTombstoneValue!@
341     }
342    
343     return retVal;
344 }
345
346                 @@endif // field.writeRemoveFromMFieldObject
347                 @@if @!field.writeClearField!@
348 void
349 @!Classname!@Base::@!field.ClearField!@(void)
350 {
351     editMField(@!field.Name!@FieldMask, @!field.VarName!@);
352
353                     @@if @!field.hasTombstoneValue!@
354     @!field.Name!@FieldType::iterator       fieldIt  = @!field.VarName!@.begin();
355     @!field.Name!@FieldType::const_iterator fieldEnd = @!field.VarName!@.end  ();
356
357     while(fieldIt != fieldEnd)
358     {
359         (*fieldIt) = @!field.tombstoneValue!@;
360
361         ++fieldIt;
362     }
363                     @@endif // @!field.hasTombstoneValue!@
364                     @@if @!field.doClearMField!@
365
366     @!field.VarName!@.clear();
367                     @@endif // field.doClearMField
368 }
369
370                 @@endif // field.writeClearField
371             @@endif // @!field.category!@ == "pointer" and @!field.pointertype!@ != "parent"
372         @@endif // @!field.access!@ != "none"
373     @@EndMFFieldLoop@@
374 @@endif // not isDecorator
375
376 @@if @!isDecoratable!@
377     @@if not @!isDecorator!@
378         @@BeginSFFieldLoop@@
379     @@if @!field.category!@ == "data"                                                       // DATA SField functions
380 @!field.FieldTypeNS!@@!field.CARD!@@!field.FieldTypeCaps!@ *
381 @!Classname!@Base::edit@!field.CARD!@@!field.Name!@(void)
382 {
383     editSField(@!field.Name!@FieldMask);
384
385     return &@!field.VarName!@;
386 }
387
388 @!field.FieldTypeNS!@@!field.CARD!@@!field.FieldTypeCaps!@ const *
389 @!Classname!@Base::get@!field.CARD!@@!field.Name!@(void) const
390 {
391     return &@!field.VarName!@;
392 }
393
394                 @@if @!CompatOneSix!@
395 #ifdef OSG_1_GET_COMPAT
396 @!field.FieldTypeNS!@@!field.CARD!@@!field.FieldTypeCaps!@ *
397 @!Classname!@Base::get@!field.CARD!@@!field.Name!@(void)
398 {
399     return this->edit@!field.CARD!@@!field.Name!@();
400 }
401 #endif
402
403                 @@endif // CompatOneSix
404 @!field.TypeNS!@@!field.Type!@ &
405 @!Classname!@Base::edit@!field.Name!@(void)
406 {
407     editSField(@!field.Name!@FieldMask);
408
409     return @!field.VarName!@.getValue();
410 }
411
412 @!field.TypeNS!@@!field.Type!@ const &
413 @!Classname!@Base::get@!field.Name!@ (void) const
414 {
415     return @!field.VarName!@.getValue();
416 }
417                 @@if @!CompatOneSix!@
418 #ifdef OSG_1_GET_COMPAT
419 @!field.TypeNS!@@!field.Type!@ &
420 @!Classname!@Base::get@!field.Name!@ (void)
421 {
422     return this->edit@!field.Name!@();
423 }
424 #endif
425
426                 @@endif // CompatOneSix
427 void
428 @!Classname!@Base::set@!field.Name!@(
429     @!field.FieldTypeNS!@@!field.CARD!@@!field.FieldTypeCaps!@::ArgumentType value)
430 {
431     editSField(@!field.Name!@FieldMask);
432
433     @!field.VarName!@.setValue(value);
434 }
435
436             @@endif // field.category == "data"
437             @@if @!field.category!@ == "pointer" and @!field.pointertype!@ != "parent"      // POINTER SField functions
438 @!field.FieldTypeNS!@@!field.CARD!@@!field.FieldTypeCaps!@ *
439 @!Classname!@Base::edit@!field.CARD!@@!field.Name!@(void)
440 {
441     return &@!field.VarName!@;
442 }
443            
444 @!field.FieldTypeNS!@@!field.CARD!@@!field.FieldTypeCaps!@ const *
445 @!Classname!@Base::get@!field.CARD!@@!field.Name!@(void) const
446 {
447     return &@!field.VarName!@;
448 }
449
450                 @@if @!CompatOneSix!@
451 #ifdef OSG_1_GET_COMPAT
452 @!field.FieldTypeNS!@@!field.CARD!@@!field.FieldTypeCaps!@ *
453 @!Classname!@Base::get@!field.CARD!@@!field.Name!@(void)
454 {
455     return this->edit@!field.CARD!@@!field.Name!@();
456 }
457 #endif
458
459                 @@endif // @!CompatOneSix!@
460 @!field.FieldTypeNS!@@!field.CARD!@@!field.FieldTypeCaps!@::reference
461 @!Classname!@Base::edit@!field.Name!@(void)
462 {
463     return @!field.VarName!@.editValue();
464 }
465                
466 @!field.FieldTypeNS!@@!field.CARD!@@!field.FieldTypeCaps!@::const_reference
467 @!Classname!@Base::get@!field.Name!@(void) const
468 {
469     return @!field.VarName!@.getValue();
470 }
471    
472                 @@if @!CompatOneSix!@
473 #ifdef OSG_1_GET_COMPAT
474 @!field.FieldTypeNS!@@!field.CARD!@@!field.FieldTypeCaps!@::reference
475 @!Classname!@Base::get@!field.Name!@(void)
476 {
477     return this->edit@!field.Name!@();
478 }
479 #endif
480
481                 @@endif // @!CompatOneSix!@
482 void
483 @!Classname!@Base::set@!field.Name!@(
484     @!field.FieldTypeNS!@@!field.CARD!@@!field.FieldTypeCaps!@::ArgumentType value)
485 {
486     editSField(@!field.Name!@FieldMask);
487    
488     @!field.VarName!@.setValue(value);
489 }
490
491             @@endif @!field.category!@ == "pointer" and @!field.pointertype!@ != "parent"
492             @@if @!field.category!@ == "pointer" and @!field.pointertype!@ == "parent"      // PARENTPOINTER SField functions
493 @!field.FieldTypeNS!@@!field.CARD!@@!field.FieldTypeCaps!@ const *
494 @!Classname!@Base::get@!field.CARD!@@!field.Name!@(void) const
495 {
496     return &@!field.VarName!@;
497 }
498
499 @!field.FieldTypeNS!@@!field.CARD!@@!field.FieldTypeCaps!@::const_reference
500 @!Classname!@Base::get@!field.Name!@(void) const
501 {
502     return @!field.VarName!@.getValue();
503 }
504
505             @@endif // @!field.category!@ == "pointer" and @!field.pointertype!@ == "parent"
506         @@EndSFFieldLoop@@
507  
508         @@BeginMFFieldLoop@@
509             @@if @!field.category!@ == "data"                                               // DATA MField functions
510 @!field.FieldTypeNS!@@!field.CARD!@@!field.FieldTypeCaps!@ *
511 @!Classname!@Base::edit@!field.CARD!@@!field.Name!@(void)
512 {
513     editMField(@!field.Name!@FieldMask, @!field.VarName!@);
514
515     return &@!field.VarName!@;
516 }
517
518 @!field.FieldTypeNS!@@!field.CARD!@@!field.FieldTypeCaps!@ const *
519 get@!field.CARD!@@!field.Name!@ (void) const
520 {
521     return &@!field.VarName!@;
522 }
523
524                 @@if @!CompatOneSix!@
525 #ifdef OSG_1_GET_COMPAT
526 @!field.FieldTypeNS!@@!field.CARD!@@!field.FieldTypeCaps!@ *
527 @!Classname!@Base::get@!field.CARD!@@!field.Name!@(void)
528 {
529     return this->edit@!field.CARD!@@!field.Name!@();
530 }
531 #endif
532                 @@endif // CompatOneSix
533 @!field.FieldTypeNS!@@!field.CARD!@@!field.FieldTypeCaps!@ &
534 @!Classname!@Base::edit@!field.Name!@(void)
535 {
536     editMField(@!field.Name!@FieldMask, @!field.VarName!@);
537
538     return @!field.VarName!@;
539 }
540
541 @!field.FieldTypeNS!@@!field.CARD!@@!field.FieldTypeCaps!@ const &
542 @!Classname!@Base::get@!field.Name!@ (void) const
543 {
544     return @!field.VarName!@;
545 }
546
547 @!field.FieldTypeNS!@@!field.CARD!@@!field.FieldTypeCaps!@::reference
548 @!Classname!@Base::edit@!field.Name!@(UInt32 const index)
549 {
550     editMField(@!field.Name!@FieldMask, @!field.VarName!@);
551    
552     return @!field.VarName!@[index];
553 }
554
555 @!field.FieldTypeNS!@@!field.CARD!@@!field.FieldTypeCaps!@::const_reference
556 @!Classname!@Base::get@!field.Name!@(UInt32 const index) const
557 {
558     return @!field.VarName!@[index];
559 }
560
561                 @@if @!CompatOneSix!@
562 #ifdef OSG_1_GET_COMPAT
563 @!field.FieldTypeNS!@@!field.CARD!@@!field.FieldTypeCaps!@::reference
564 @!Classname!@Base::get@!field.Name!@(UInt32 const index)
565 {
566     return this->edit@!field.Name!@(index);
567 }
568
569 @!field.FieldTypeNS!@@!field.CARD!@@!field.FieldTypeCaps!@ &
570 @!Classname!@Base::get@!field.Name!@(void)
571 {
572     return this->edit@!field.Name!@();
573 }
574 #endif
575                 @@endif // CompatOneSix
576             @@endif // @!field.category!@ == "data"
577             @@if @!field.category!@ == "pointer" and @!field.pointertype!@ != "parent"      // POINTER MField functions
578 @!field.FieldTypeNS!@@!field.CARD!@@!field.FieldTypeCaps!@ *
579 @!Classname!@Base::edit@!field.CARD!@@!field.Name!@(void)
580 {
581     editMField(@!field.Name!@FieldMask, @!field.VarName!@);
582
583     return &@!field.VarName!@;
584 }
585
586 @!field.FieldTypeNS!@@!field.CARD!@@!field.FieldTypeCaps!@ const *
587 @!Classname!@Base::get@!field.CARD!@@!field.Name!@(void) const
588 {
589     return &@!field.VarName!@;
590 }
591
592 @!field.FieldTypeNS!@@!field.CARD!@@!field.FieldTypeCaps!@ &
593 @!Classname!@Base::edit@!field.Name!@(void) const
594 {
595     editMField(@!field.Name!@FieldMask, @!field.VarName!@);
596
597     return @!field.VarName!@;
598 }
599
600 @!field.FieldTypeNS!@@!field.CARD!@@!field.FieldTypeCaps!@ const &
601 @!Classname!@Base::get@!field.Name!@(void) const
602 {
603     return @!field.VarName!@;
604 }
605
606 @!field.FieldTypeNS!@@!field.CARD!@@!field.FieldTypeCaps!@::reference
607 @!Classname!@Base::edit@!field.Name!@(UInt32 const index) const
608 {
609     editMField(@!field.Name!@FieldMask, @!field.VarName!@);
610
611     return @!field.VarName!@[index];
612 }
613
614 @!field.FieldTypeNS!@@!field.CARD!@@!field.FieldTypeCaps!@::const_reference
615 @!Classname!@Base::get@!field.Name!@(UInt32 const index) const
616 {
617     return @!field.VarName!@[index];
618 }
619
620                 @@if @!CompatOneSix!@
621 #ifdef OSG_1_GET_COMPAT
622 @!field.FieldTypeNS!@@!field.CARD!@@!field.FieldTypeCaps!@::reference
623 @!Classname!@Base::get@!field.Name!@(UInt32 const index)
624 {
625     return this->edit@!field.Name!@(index);
626 }
627
628 @!field.FieldTypeNS!@@!field.CARD!@@!field.FieldTypeCaps!@ &
629 @!Classname!@Base::get@!field.Name!@(void)
630 {
631     return this->edit@!field.Name!@();
632 }
633 #endif
634
635                 @@endif
636             @@endif // @!field.category!@ == "pointer" and @!field.pointertype!@ != "parent"
637             @@if @!field.category!@ == "pointer" and @!field.pointertype!@ == "parent"      // PARENTPOINTER MField functions
638 @!field.FieldTypeNS!@@!field.CARD!@@!field.FieldTypeCaps!@ const *
639 @!Classname!@Base::get@!field.CARD!@@!field.Name!@(void) const
640 {
641     return &@!field.VarName!@;
642 }
643
644 @!field.FieldTypeNS!@@!field.CARD!@@!field.FieldTypeCaps!@ const &
645 @!Classname!@Base::get@!field.Name!@(void) const
646 {
647     return @!field.VarName!@;
648 }
649
650 @!field.TypeNS!@@!field.Type!@Const
651 @!Classname!@Base::get@!field.Name!@(UInt32 const index) const
652 {
653     return @!field.VarName!@[index];
654 }
655
656             @@endif // @!field.category!@ == "pointer" and @!field.pointertype!@ == "parent"
657         @@EndMFFieldLoop@@
658     @@else // not isDecorator
659         @@BeginSFFieldLoop@@
660             @@if @!field.category!@ == "data"                                               // DATA SField functions (Decorator)
661 @!field.FieldTypeNS!@@!field.CARD!@@!field.FieldTypeCaps!@ *
662 @!Classname!@Base::edit@!field.CARD!@@!field.Name!@(void)
663 {
664     if(_sfDecoratee.getValue() != NullFC)
665     {
666         return _sfDecoratee.getValue()->edit@!field.CARD!@@!field.Name!@();
667     }
668     else
669     {
670         return Inherited::edit@!field.CARD!@@!field.Name!@();
671     }
672 }
673
674 @!field.FieldTypeNS!@@!field.CARD!@@!field.FieldTypeCaps!@ const *
675 @!Classname!@Base::get@!field.CARD!@@!field.Name!@(void) const
676 {
677     if(_sfDecoratee.getValue() != NullFC)
678     {
679         return _sfDecoratee.getValue()->get@!field.CARD!@@!field.Name!@();
680     }
681     else
682     {
683         return Inherited::get@!field.CARD!@@!field.Name!@();
684     }
685 }
686
687                     @@if @!CompatOneSix!@
688 #ifdef OSG_1_GET_COMPAT
689 @!field.FieldTypeNS!@@!field.CARD!@@!field.FieldTypeCaps!@ *
690 @!Classname!@Base::get@!field.CARD!@@!field.Name!@(void)
691 {
692     this->edit@!field.CARD!@@!field.Name!@();
693 }
694 #endif
695
696                     @@endif // CompatOneSix
697 @!field.FieldTypeNS!@@!field.CARD!@@!field.FieldTypeCaps!@::reference
698 @!Classname!@Base::edit@!field.Name!@(void)
699 {
700     if(_sfDecoratee.getValue() != NullFC)
701     {
702         return _sfDecoratee.getValue()->edit@!field.Name!@();
703     }
704     else
705     {
706         return Inherited::edit@!field.Name!@();
707     }
708 }
709
710 @!field.FieldTypeNS!@@!field.CARD!@@!field.FieldTypeCaps!@::const_reference
711 @!Classname!@Base::get@!field.Name!@(void) const
712 {
713     if(_sfDecoratee.getValue() != NullFC)
714     {
715         return _sfDecoratee.getValue()->get@!field.Name!@();
716     }
717     else
718     {
719         return Inherited::get@!field.Name!@();
720     }
721 }
722
723                     @@if @!CompatOneSix!@
724 #ifdef OSG_1_GET_COMPAT
725 @!field.FieldTypeNS!@@!field.CARD!@@!field.FieldTypeCaps!@::reference
726 @!Classname!@Base::get@!field.Name!@(void)
727 {
728     return this->edit@!field.Name!@();
729 }
730 #endif
731
732                     @@endif // CompatOneSix
733 void
734 @!Classname!@Base::set@!field.Name!@(
735     @!field.FieldTypeNS!@@!field.CARD!@@!field.FieldTypeCaps!@::ArgumentType value)
736 {
737     if(_sfDecoratee.getValue() != NullFC)
738     {
739         _sfDecoratee.getValue()->set@!field.Name!@(value);
740     }
741     else
742     {
743         Inherited::set@!field.Name!@(value);
744     }
745 }
746
747             @@endif // @!field.category!@ == "data"
748             @@if @!field.category!@ == "pointer" and @!field.pointertype!@ != "parent"      // POINTER SField functions (Decorator)
749 @!field.FieldTypeNS!@@!field.CARD!@@!field.FieldTypeCaps!@ *
750 @!Classname!@Base::edit@!field.CARD!@@!field.Name!@(void)
751 {
752     if(_sfDecoratee.getValue() != NullFC)
753     {
754         return _sfDecoratee.getValue()->edit@!field.CARD!@@!field.Name!@();
755     }
756     else
757     {
758         return Inherited::edit@!field.CARD!@@!field.Name!@();
759     }
760 }
761            
762 @!field.FieldTypeNS!@@!field.CARD!@@!field.FieldTypeCaps!@ const *
763 @!Classname!@Base::get@!field.CARD!@@!field.Name!@(void) const
764 {
765     if(_sfDecoratee.getValue() != NullFC)
766     {
767         return _sfDecoratee.getValue()->get@!field.CARD!@@!field.Name!@();
768     }
769     else
770     {
771         return Inherited::get@!field.CARD!@@!field.Name!@();
772     }
773 }
774
775                 @@if @!CompatOneSix!@
776 #ifdef OSG_1_GET_COMPAT
777 @!field.FieldTypeNS!@@!field.CARD!@@!field.FieldTypeCaps!@ *
778 @!Classname!@Base::get@!field.CARD!@@!field.Name!@(void)
779 {
780     if(_sfDecoratee.getValue() != NullFC)
781     {
782         return _sfDecoratee.getValue()->edit@!field.CARD!@@!field.Name!@();
783     }
784     else
785     {
786         return Inherited::edit@!field.CARD!@@!field.Name!@();
787     }
788 }
789 #endif
790
791                 @@endif // @!CompatOneSix!@
792 @!field.FieldTypeNS!@@!field.CARD!@@!field.FieldTypeCaps!@::reference
793 @!Classname!@Base::edit@!field.Name!@(void)
794 {
795     if(_sfDecoratee.getValue() != NullFC)
796     {
797         return _sfDecoratee.getValue()->edit@!field.Name!@();
798     }
799     else
800     {
801         return Inherited::edit@!field.Name!@();
802     }
803 }
804                
805 @!field.FieldTypeNS!@@!field.CARD!@@!field.FieldTypeCaps!@::const_reference
806 @!Classname!@Base::get@!field.Name!@(void) const
807 {
808     if(_sfDecoratee.getValue() != NullFC)
809     {
810         return _sfDecoratee.getValue()->get@!field.Name!@();
811     }
812     else
813     {
814         return Inherited::get@!field.Name!@();
815     }
816 }
817    
818 void
819 @!Classname!@Base::set@!field.Name!@(
820     @!field.FieldTypeNS!@@!field.CARD!@@!field.FieldTypeCaps!@::ArgumentType value)
821 {
822     if(_sfDecoratee.getValue() != NullFC)
823     {
824         _sfDecoratee.getValue()->set@!field.Name!@(value);
825     }
826     else
827     {
828         Inherited::set@!field.Name!@(value);
829     }
830 }
831
832             @@endif // @!field.category!@ == "pointer" and @!field.pointertype!@ != "parent"
833             @@if @!field.category!@ == "pointer" and @!field.pointertype!@ == "parent"      // PARENTPOINTER SField functions (Decorator)
834 @!field.FieldTypeNS!@@!field.CARD!@@!field.FieldTypeCaps!@ const *
835 @!Classname!@Base::get@!field.CARD!@@!field.Name!@(void) const
836 {
837     if(_sfDecoratee.getValue() != NullFC)
838     {
839         _sfDecoratee.getValue()->get@!field.CARD!@@!field.Name!@();
840     }
841     else
842     {
843         Inherited::get@!field.CARD!@@!field.Name!@();
844     }
845 }
846
847 @!field.FieldTypeNS!@@!field.CARD!@@!field.FieldTypeCaps!@::const_reference
848 @!Classname!@Base::get@!field.Name!@(void) const
849 {
850     if(_sfDecoratee.getValue() != NullFC)
851     {
852         _sfDecoratee.getValue()->get@!field.Name!@();
853     }
854     else
855     {
856         Inherited::get@!field.Name!@();
857     }
858 }
859
860             @@endif // @!field.category!@ == "pointer" and @!field.pointertype!@ == "parent"
861         @@EndSFFieldLoop@@
862          @@BeginMFFieldLoop@@
863             @@if @!field.category!@ == "data"                                               // DATA MField functions (Decorator)
864 @!field.FieldTypeNS!@@!field.CARD!@@!field.FieldTypeCaps!@ *
865 @!Classname!@Base::edit@!field.CARD!@@!field.Name!@(void)
866 {
867     if(_sfDecoratee.getValue() != NullFC)
868     {
869         return _sfDecoratee.getValue()->edit@!field.CARD!@@!field.Name!@();
870     }
871     else
872     {
873         return Inherited::edit@!field.CARD!@@!field.Name!@();
874     }
875 }
876
877 @!field.FieldTypeNS!@@!field.CARD!@@!field.FieldTypeCaps!@ const *
878 @!Classname!@Base::get@!field.CARD!@@!field.Name!@(void) const
879 {
880     if(_sfDecoratee.getValue() != NullFC)
881     {
882         return _sfDecoratee.getValue()->get@!field.CARD!@@!field.Name!@();
883     }
884     else
885     {
886         return Inherited::get@!field.CARD!@@!field.Name!@();
887     }
888 }
889
890                     @@if @!CompatOneSix!@
891 #ifdef OSG_1_GET_COMPAT
892 @!field.FieldTypeNS!@@!field.CARD!@@!field.FieldTypeCaps!@ *
893 @!Classname!@Base::get@!field.CARD!@@!field.Name!@(void)
894 {
895     return this->edit@!field.CARD!@@!field.Name!@();
896 }
897 #endif
898
899                     @@endif // CompatOneSix
900 @!field.FieldTypeNS!@@!field.CARD!@@!field.FieldTypeCaps!@ &
901 @!Classname!@Base::edit@!field.Name!@(void)
902 {
903     if(_sfDecoratee.getValue() != NullFC)
904     {
905         return _sfDecoratee.getValue()->edit@!field.Name!@();
906     }
907     else
908     {
909         return Inherited::edit@!field.Name!@();
910     }
911 }
912    
913 @!field.FieldTypeNS!@@!field.CARD!@@!field.FieldTypeCaps!@ const &
914 @!Classname!@Base::get@!field.Name!@(void) const
915 {
916     if(_sfDecoratee.getValue() != NullFC)
917     {
918         return _sfDecoratee.getValue()->get@!field.Name!@();
919     }
920     else
921     {
922         return Inherited::get@!field.Name!@();
923     }
924 }
925
926 @!field.FieldTypeNS!@@!field.CARD!@@!field.FieldTypeCaps!@::reference
927 @!Classname!@Base::edit@!field.Name!@(UInt32 const index)
928 {
929     if(_sfDecoratee.getValue() != NullFC)
930     {
931         return _sfDecoratee.getValue()->edit@!field.Name!@(index);
932     }
933     else
934     {
935         return Inherited::edit@!field.Name!@(index);
936     }
937 }
938    
939 @!field.FieldTypeNS!@@!field.CARD!@@!field.FieldTypeCaps!@::const_reference
940 @!Classname!@Base::get@!field.Name!@(UInt32 const index) const
941 {
942     if(_sfDecoratee.getValue() != NullFC)
943     {
944         return _sfDecoratee.getValue()->get@!field.Name!@(index);
945     }
946     else
947     {
948         return Inherited::get@!field.Name!@(index);
949     }
950 }
951
952                     @@if @!CompatOneSix!@
953 #ifdef OSG_1_GET_COMPAT
954 @!field.FieldTypeNS!@@!field.CARD!@@!field.FieldTypeCaps!@::reference
955 @!Classname!@Base::get@!field.Name!@(UInt32 const index)
956 {
957     return this->edit@!field.Name!@(index);
958 }
959
960 @!field.FieldTypeNS!@@!field.CARD!@@!field.FieldTypeCaps!@ &
961 @!Classname!@Base::get@!field.Name!@(void)
962 {
963     return this->edit@!field.Name!@();
964 }
965 #endif
966
967                     @@endif // CompatOneSix
968             @@endif // @!field.category!@ == "data"
969             @@if @!field.category!@ == "pointer" and @!field.pointertype!@ != "parent"      // POINTER MField functions (Decorator)
970 @!field.FieldTypeNS!@@!field.CARD!@@!field.FIeldTypeCaps!@ *
971 @!Classname!@Base::edit@!field.CARD!@@!field.Name!@(void)
972 {
973     if(_sfDecoratee.getValue() != NullFC)
974     {
975         return _sfDecoratee.getValue()->edit@!field.CARD!@@!field.Name!@();
976     }
977     else
978     {
979         return Inherited::edit@!field.CARD!@@!field.Name!@();
980     }
981 }
982            
983 @!field.FieldTypeNS!@@!field.CARD!@@!field.FieldTypeCaps!@ const *
984 @!Classname!@Base::get@!field.CARD!@@!field.Name!@(void) const
985 {
986     if(_sfDecoratee.getValue() != NullFC)
987     {
988         return _sfDecoratee.getValue()->get@!field.CARD!@@!field.Name!@();
989     }
990     else
991     {
992         return Inherited::get@!field.CARD!@@!field.Name!@();
993     }   
994 }
995
996 @!field.FieldTypeNS!@@!field.CARD!@@!field.FieldTypeCaps!@ const &
997 @!Classname!@Base::get@!field.Name!@(void) const
998 {
999     if(_sfDecoratee.getValue() != NullFC)
1000     {
1001         return _sfDecoratee.getValue()->get@!field.Name!@();
1002     }
1003     else
1004     {
1005         return Inherited::get@!field.Name!@();
1006     }   
1007 }
1008
1009 @!field.FieldTypeNS!@@!field.CARD!@@!field.FieldTypeCaps!@::reference
1010 @!Classname!@Base::edit@!field.Name!@(UInt32 const index)
1011 {
1012     if(_sfDecoratee.getValue() != NullFC)
1013     {
1014         return _sfDecoratee.getValue()->edit@!field.Name!@(index);
1015     }
1016     else
1017     {
1018         return Inherited::edit@!field.Name!@(index);
1019     }   
1020 }
1021
1022 @!field.FieldTypeNS!@@!field.CARD!@@!field.FieldTypeCaps!@::const_reference
1023 @!Classname!@Base::get@!field.Name!@(UInt32 const index) const
1024 {
1025     if(_sfDecoratee.getValue() != NullFC)
1026     {
1027         return _sfDecoratee.getValue()->get@!field.Name!@(index);
1028     }
1029     else
1030     {
1031         return Inherited::get@!field.Name!@(index);
1032     }   
1033 }
1034
1035                 @@if @!CompatOneSix!@
1036 #ifdef OSG_1_GET_COMPAT
1037 @!field.FieldTypeNS!@@!field.CARD!@@!field.FieldTypeCaps!@::reference
1038 @!Classname!@Base::get@!field.Name!@(UInt32 const index)
1039 {
1040     return this->edit@!field.Name!@(index);
1041 }
1042
1043 @!field.FieldTypeNS!@@!field.CARD!@@!field.FieldTypeCaps!@ &
1044 @!Classname!@Base::get@!field.Name!@(void)
1045 {
1046     return this->edit@!field.Name!@();
1047 }
1048 #endif
1049                 @@endif // @!CompatOneSix!@
1050             @@endif // @!field.category!@ == "pointer" and @!field.pointertype!@ != "parent"
1051             @@if @!field.category!@ == "pointer" and  @!field.pointertype!@ == "parent"     // PARENTPOINTER MField functions (Decorator)
1052 @!field.FieldTypeNS!@@!field.CARD!@@!field.FieldTypeCaps!@ const *
1053 @!Classname!@Base::get@!field.CARD!@@!field.Name!@(void) const
1054 {
1055     if(_sfDecoratee.getValue() != NullFC)
1056     {
1057         return _sfDecoratee.getValue()->get@!field.CARD!@@!field.Name!@();
1058     }
1059     else
1060     {
1061         return Inherited::get@!field.CARD!@@!field.Name!@();
1062     }   
1063 }
1064
1065 @!field.FieldTypeNS!@@!field.CARD!@@!field.FieldTypeCaps!@ const &
1066 @!Classname!@Base::get@!field.Name!@(void) const
1067 {
1068     if(_sfDecoratee.getValue() != NullFC)
1069     {
1070         return _sfDecoratee.getValue()->get@!field.Name!@();
1071     }
1072     else
1073     {
1074         return Inherited::get@!field.Name!@();
1075     }
1076 }
1077
1078 @!field.FieldTypeNS!@@!field.CARD!@@!field.FieldTypeCaps!@::const_reference
1079 @!Classname!@Base::get@!field.Name!@(UInt32 const index) const
1080 {
1081     if(_sfDecoratee.getValue() != NullFC)
1082     {
1083         return _sfDecoratee.getValue()->get@!field.Name!@(index);
1084     }
1085     else
1086     {
1087         return Inherited::get@!field.Name!@(index);
1088     }
1089 }
1090
1091             @@endif // @!field.category!@ == "pointer" and  @!field.pointertype!@ == "parent"
1092         @@EndMFFieldLoop@@
1093     @@endif // not isDecorator
1094 @@endif // isDecoratable
1095
1096 /*------------------------------ access -----------------------------------*/
1097
1098 UInt32 @!Classname!@Base::getBinSize(ConstFieldMaskArg whichField)
1099 {
1100     UInt32 returnValue = Inherited::getBinSize(whichField);
1101
1102 @@if @!isDecorator!@
1103     if(FieldBits::NoField != (DecorateeFieldMask & whichField))
1104     {
1105         returnValue += _sfDecoratee.getBinSize();
1106     }
1107 @@else // isDecorator
1108     @@BeginFieldLoop@@
1109     if(FieldBits::NoField != (@!field.Name!@FieldMask & whichField))
1110     {
1111         returnValue += @!field.VarName!@.getBinSize();
1112     }
1113     @@EndFieldLoop@@
1114 @@endif // isDecorator
1115
1116     return returnValue;
1117 }
1118
1119 void @!Classname!@Base::copyToBin(BinaryDataHandler &pMem,
1120                                   ConstFieldMaskArg  whichField)
1121 {
1122     Inherited::copyToBin(pMem, whichField);
1123
1124 @@if @!isDecorator!@
1125     if(FieldBits::NoField != (DecorateeFieldMask & whichField))
1126     {
1127         _sfDecoratee.copyToBin(pMem);
1128     }
1129 @@else // isDecorator
1130     @@BeginFieldLoop@@
1131     if(FieldBits::NoField != (@!field.Name!@FieldMask & whichField))
1132     {
1133         @!field.VarName!@.copyToBin(pMem);
1134     }
1135     @@EndFieldLoop@@
1136 @@endif // isDecorator
1137 }
1138
1139 void @!Classname!@Base::copyFromBin(BinaryDataHandler &pMem,
1140                                     ConstFieldMaskArg  whichField)
1141 {
1142     Inherited::copyFromBin(pMem, whichField);
1143
1144 @@if @!isDecorator!@
1145     if(FieldBits::NoField != (DecorateeFieldMask & whichField))
1146     {
1147         _sfDecoratee.copyFromBin(pMem);
1148     }
1149 @@else // isDecorator
1150     @@BeginFieldLoop@@
1151     if(FieldBits::NoField != (@!fie