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

Revision 1032, 46.9 kB (checked in by cneumann, 1 year ago)

added: generic interface
changed: factory functions return RefPtr?

The unittests don't pass right now, because of the change
to the factory functions, which leads to containers
being immediately destroyed as they are not assigned to
a RefPtr?.

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
111 void @!Classname!@Base::classDescInserter(TypeObject &oType)
112 {
113     @@if @!hasFields!@
114     FieldDescriptionBase *pDesc = NULL;
115
116         @@if @!hasMixinParent!@
117     Inherited::classDescInserter(oType);
118
119         @@endif // hasMixinParent
120     @@endif // hasFields
121     @@if @!isDecorator!@
122     pDesc = new SF@!Parent!@InternalPtr::Description(
123         SF@!Parent!@InternalPtr::getClassType(),
124         "decoratee",
125         "undocumented decoratee",
126         DecorateeFieldId, DecorateeFieldMask,
127         true,
128         @!DecorateeFieldFlags!@,
129         static_cast<FieldEditMethodSig>(&@!Classname!@Base::editHandleDecoratee),
130         static_cast<FieldGetMethodSig >(&@!Classname!@Base::getHandleDecoratee ));
131
132     oType.addInitialDesc(pDesc);
133     @@else // isDecorator
134         @@BeginFieldLoop@@
135
136     pDesc = new @!field.FieldTypeNS!@@!field.CARD!@@!field.FieldTypeCaps!@::Description(
137         @!field.FieldTypeNS!@@!field.CARD!@@!field.FieldTypeCaps!@::getClassType(),
138         "@!field.DescName!@",
139         @!field.SafeDescription!@,
140         @!field.Name!@FieldId, @!field.Name!@FieldMask,
141         @!field.Visibility!@,
142         @!field.Flags!@,
143             @@if @!field.category!@ == "data"
144                 @@if @!field.access!@ == "none"
145         static_cast<FieldEditMethodSig>(&@!Classname!@Base::invalidEditField),
146         static_cast<FieldGetMethodSig >(&@!Classname!@Base::invalidGetField));
147                 @@else // @!field.access!@ == "none"
148         static_cast<FieldEditMethodSig>(&@!Classname!@Base::editHandle@!field.Name!@),
149         static_cast<FieldGetMethodSig >(&@!Classname!@Base::getHandle@!field.Name!@));
150                 @@endif // @!field.access!@ == "none"
151             @@endif // @!field.category!@ == "data"
152             @@if @!field.category!@ == "pointer" and @!field.pointertype!@ != "parent"
153                 @@if @!field.access!@ == "none"
154         static_cast<FieldEditMethodSig>(&@!Classname!@Base::invalidEditField),
155         static_cast<FieldGetMethodSig >(&@!Classname!@Base::invalidGetField));
156                 @@else  // @!field.access!@ == "none"
157         static_cast<FieldEditMethodSig>(&@!Classname!@Base::editHandle@!field.Name!@),
158         static_cast<FieldGetMethodSig >(&@!Classname!@Base::getHandle@!field.Name!@));
159                 @@endif // @!field.access!@ == "none"
160             @@endif // @!field.category!@ == "pointer" and @!field.pointertype!@ != "parent"
161             @@if @!field.category!@ == "pointer" and @!field.pointertype!@ == "parent"
162                 @@if @!field.access!@ == "none"
163         static_cast<FieldEditMethodSig>(&@!Classname!@Base::invalidEditField),
164         static_cast<FieldGetMethodSig >(&@!Classname!@Base::invalidGetField));
165                 @@else  // @!field.access!@ == "none"
166         static_cast<FieldEditMethodSig>(&@!Classname!@Base::invalidEditField),
167         static_cast<FieldGetMethodSig >(&@!Classname!@Base::getHandle@!field.Name!@));
168                 @@endif // @!field.access!@ == "none"
169             @@endif // @!field.category!@ == "pointer" and @!field.pointertype!@ == "parent"
170
171     oType.addInitialDesc(pDesc);
172         @@EndFieldLoop@@
173     @@endif // isDecorator
174 }
175
176 @@endif // hasFields
177
178 @!Classname!@Base::TypeObject @!Classname!@Base::_type(
179     @!Classname!@Base::getClassname(),
180     Inherited::getClassname(),
181     "@!Group!@",
182     @!Namespace!@,
183 @@if @!isAbstract!@
184     NULL,
185 @@else // isAbstract
186     (ProtoBundleCreateF) &@!Classname!@Base::createEmpty,
187 @@endif // isAbstract
188     @!Classname!@::initMethod,
189 @@if @!hasFields!@
190     (InitalInsertDescFunc) &@!Classname!@Base::classDescInserter,
191 @@else // hasFields
192     NULL,
193 @@endif // hasFields
194     false,
195     @!FieldsUnmarkedOnCreate!@,
196     @!Fcdxml!@,
197     @!SafeDescription!@
198     );
199
200 /*------------------------------ get -----------------------------------*/
201
202 FieldBundleType &
203 @!Classname!@Base::getType(void)
204 {
205     return _type;
206 }
207
208 FieldBundleType const &
209 @!Classname!@Base::getType(void) const
210 {
211     return _type;
212 }
213
214 UInt32
215 @!Classname!@Base::getContainerSize(void) const
216 {
217     return sizeof(@!Classname!@);
218 }
219
220 @@if not @!isDecorator!@   
221     @@BeginMFFieldLoop@@
222         @@if @!field.access!@ != "none"
223 /*-------------------------------------------------------------------------*/
224 /* Field @!field.CARD!@@!field.Name:63!@ */
225             @@if @!field.category!@ == "pointer" and @!field.pointertype!@ != "parent"      // POINTER MField functions
226                 @@if @!field.writePushToField!@
227 void
228 @!Classname!@Base::@!field.PushToField!@(@!field.FieldTypeNS!@@!field.CARD!@@!field.FieldTypeCaps!@::ArgumentType value)
229 {
230                     @@if @!field.checkNilPtr!@
231     if(value == NullFC)
232         return;
233
234                     @@endif // field.checkNilPtr
235     editMField(@!field.Name!@FieldMask, @!field.VarName!@);
236
237     @!field.VarName!@.push_back(value);
238 }
239
240                 @@endif // field.writePushToField
241                 @@if @!field.writeAssignMField!@
242 void
243 @!Classname!@Base::@!field.AssignMField!@(@!field.FieldTypeNS!@@!field.CARD!@@!field.FieldTypeCaps!@ const &value)
244 {
245     editMField(@!field.Name!@FieldMask, @!field.VarName!@);
246
247     @!field.VarName!@.setValues(value);
248 }
249
250                 @@endif // field.writeAssignMField
251                 @@if @!field.writeInsertIntoMField!@
252 void
253 @!Classname!@Base::@!field.InsertIntoMField!@(
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     editMField(@!field.Name!@FieldMask, @!field.VarName!@);
263
264     @!field.Name!@FieldType::iterator fieldIt = @!field.VarName!@.begin();
265
266     fieldIt += uiIndex;
267
268     @!field.VarName!@.insert(fieldIt, value);
269 }
270
271                 @@endif // field.writeInsertIntoMField
272                 @@if @!field.writeReplaceInMFieldIndex!@
273 void
274 @!Classname!@Base::@!field.ReplaceInMFieldIndex!@(
275     UInt32 const uiIndex,
276     @!field.FieldTypeNS!@@!field.CARD!@@!field.FieldTypeCaps!@::ArgumentType value)
277 {
278                     @@if @!field.checkNilPtr!@
279     if(value == NullFC)
280         return;
281
282                     @@endif // field.checkNilPtr
283     if(uiIndex >= @!field.VarName!@.size())
284         return;
285
286     editMField(@!field.Name!@FieldMask, @!field.VarName!@);
287
288     @!field.VarName!@[uiIndex] = value;
289 }
290
291                 @@endif // field.writeReplaceInMFieldIndex
292                 @@if @!field.writeReplaceInMFieldObject!@
293 void
294 @!Classname!@Base::@!field.ReplaceInMFieldObject!@(
295     @!field.FieldTypeNS!@@!field.CARD!@@!field.FieldTypeCaps!@::ArgumentType pOldElem,
296     @!field.FieldTypeNS!@@!field.CARD!@@!field.FieldTypeCaps!@::ArgumentType pNewElem )
297 {
298                     @@if @!field.checkNilPtr!@
299     if(pNewElem == NullFC)
300         return;
301
302                     @@endif // field.checkNilPtr
303     @!field.Name!@FieldType::iterator fieldIt =
304         @!field.VarName!@.find(pOldElem);
305    
306     if(fieldIt != @!field.VarName!@.end())
307     {
308         editMField(@!field.Name!@FieldMask, @!field.VarName!@);
309        
310         (*fieldIt) = @!field.TypeNS!@@!field.Type!@(pNewElem);
311     }
312 }
313
314                 @@endif // field.writeReplaceInMFieldObject
315                 @@if @!field.writeRemoveFromMFieldIndex!@
316 void
317 @!Classname!@Base::@!field.RemoveFromMFieldIndex!@(UInt32 const uiIndex)
318 {
319     if(uiIndex < @!field.VarName!@.size())
320     {
321         editMField(@!field.Name!@FieldMask, @!field.VarName!@);
322
323         @!field.Name!@FieldType::iterator fieldIt = @!field.VarName!@.begin();
324
325         fieldIt += uiIndex;
326
327                     @@if @!field.hasTombstoneValue!@
328         (*fieldIt) = @!field.tombstoneValue!@;
329                     @@else // @!field.hasTombstoneValue!@
330         @!field.VarName!@.erase(fieldIt);
331                     @@endif // @!field.hasTombstoneValue!@
332     }
333 }
334
335                 @@endif // field.writeRemoveFromMFieldIndex
336                 @@if @!field.writeRemoveFromMFieldObject!@
337 void
338 @!Classname!@Base::@!field.RemoveFromMFieldObject!@(
339     @!field.FieldTypeNS!@@!field.CARD!@@!field.FieldTypeCaps!@::ArgumentType value)
340 {
341     @!field.Name!@FieldType::iterator fieldIt =
342         @!field.VarName!@.find(value);
343        
344     if(fieldIt != @!field.VarName!@.end())
345     {
346         editMField(@!field.Name!@FieldMask, @!field.VarName!@);
347        
348                     @@if @!field.hasTombstoneValue!@
349         (*fieldIt) = @!field.tombstoneValue!@;
350                     @@else // @!field.hasTombstoneValue!@
351         @!field.VarName!@.erase(fieldIt);
352                     @@endif // @!field.hasTombstoneValue!@
353     }
354 }
355
356                 @@endif // field.writeRemoveFromMFieldObject
357                 @@if @!field.writeClearField!@
358 void
359 @!Classname!@Base::@!field.ClearField!@(void)
360 {
361     editMField(@!field.Name!@FieldMask, @!field.VarName!@);
362
363                     @@if @!field.hasTombstoneValue!@
364     @!field.Name!@FieldType::iterator       fieldIt  = @!field.VarName!@.begin();
365     @!field.Name!@FieldType::const_iterator fieldEnd = @!field.VarName!@.end  ();
366
367     while(fieldIt != fieldEnd)
368     {
369         (*fieldIt) = @!field.tombstoneValue!@;
370
371         ++fieldIt;
372     }
373                     @@endif // @!field.hasTombstoneValue!@
374                     @@if @!field.doClearMField!@
375
376     @!field.VarName!@.clear();
377                     @@endif // field.doClearMField
378 }
379
380                 @@endif // field.writeClearField
381             @@endif // @!field.category!@ == "pointer" and @!field.pointertype!@ != "parent"
382         @@endif // @!field.access!@ != "none"
383     @@EndMFFieldLoop@@
384 @@endif // not isDecorator
385
386 @@if @!isDecoratable!@
387     @@if not @!isDecorator!@
388         @@BeginSFFieldLoop@@
389     @@if @!field.category!@ == "data"                                                       // DATA SField functions
390 @!field.FieldTypeNS!@@!field.CARD!@@!field.FieldTypeCaps!@ *
391 @!Classname!@Base::edit@!field.CARD!@@!field.Name!@(void)
392 {
393     editSField(@!field.Name!@FieldMask);
394
395     return &@!field.VarName!@;
396 }
397
398 @!field.FieldTypeNS!@@!field.CARD!@@!field.FieldTypeCaps!@ const *
399 @!Classname!@Base::get@!field.CARD!@@!field.Name!@(void) const
400 {
401     return &@!field.VarName!@;
402 }
403
404                 @@if @!CompatOneSix!@
405 #ifdef OSG_1_GET_COMPAT
406 @!field.FieldTypeNS!@@!field.CARD!@@!field.FieldTypeCaps!@ *
407 @!Classname!@Base::get@!field.CARD!@@!field.Name!@(void)
408 {
409     return this->edit@!field.CARD!@@!field.Name!@();
410 }
411 #endif
412
413                 @@endif // CompatOneSix
414 @!field.TypeNS!@@!field.Type!@ &
415 @!Classname!@Base::edit@!field.Name!@(void)
416 {
417     editSField(@!field.Name!@FieldMask);
418
419     return @!field.VarName!@.getValue();
420 }
421
422 @!field.TypeNS!@@!field.Type!@ const &
423 @!Classname!@Base::get@!field.Name!@ (void) const
424 {
425     return @!field.VarName!@.getValue();
426 }
427                 @@if @!CompatOneSix!@
428 #ifdef OSG_1_GET_COMPAT
429 @!field.TypeNS!@@!field.Type!@ &
430 @!Classname!@Base::get@!field.Name!@ (void)
431 {
432     return this->edit@!field.Name!@();
433 }
434 #endif
435
436                 @@endif // CompatOneSix
437 void
438 @!Classname!@Base::set@!field.Name!@(
439     @!field.FieldTypeNS!@@!field.CARD!@@!field.FieldTypeCaps!@::ArgumentType value)
440 {
441     editSField(@!field.Name!@FieldMask);
442
443     @!field.VarName!@.setValue(value);
444 }
445
446             @@endif // field.category == "data"
447             @@if @!field.category!@ == "pointer" and @!field.pointertype!@ != "parent"      // POINTER SField functions
448 @!field.FieldTypeNS!@@!field.CARD!@@!field.FieldTypeCaps!@ const *
449 @!Classname!@Base::get@!field.CARD!@@!field.Name!@(void) const
450 {
451     return &@!field.VarName!@;
452 }
453
454 @!field.TypeNS!@@!field.Type!@Const
455 @!Classname!@Base::get@!field.Name!@(void) const
456 {
457     return @!field.VarName!@.getValue();
458 }
459    
460 void
461 @!Classname!@Base::set@!field.Name!@(
462     @!field.FieldTypeNS!@@!field.CARD!@@!field.FieldTypeCaps!@::ArgumentType value)
463 {
464     editSField(@!field.Name!@FieldMask);
465    
466     @!field.VarName!@.setValue(value);
467 }
468
469             @@endif @!field.category!@ == "pointer" and @!field.pointertype!@ != "parent"
470             @@if @!field.category!@ == "pointer" and @!field.pointertype!@ == "parent"      // PARENTPOINTER SField functions
471 @!field.FieldTypeNS!@@!field.CARD!@@!field.FieldTypeCaps!@ const *
472 @!Classname!@Base::get@!field.CARD!@@!field.Name!@(void) const
473 {
474     return &@!field.VarName!@;
475 }
476
477 @!field.FieldTypeNS!@@!field.CARD!@@!field.FieldTypeCaps!@::const_reference
478 @!Classname!@Base::get@!field.Name!@(void) const
479 {
480     return @!field.VarName!@.getValue();
481 }
482
483             @@endif // @!field.category!@ == "pointer" and @!field.pointertype!@ == "parent"
484         @@EndSFFieldLoop@@
485  
486         @@BeginMFFieldLoop@@
487             @@if @!field.category!@ == "data"                                               // DATA MField functions
488 @!field.FieldTypeNS!@@!field.CARD!@@!field.FieldTypeCaps!@ *
489 @!Classname!@Base::edit@!field.CARD!@@!field.Name!@(void)
490 {
491     editMField(@!field.Name!@FieldMask, @!field.VarName!@);
492
493     return &@!field.VarName!@;
494 }
495
496 @!field.FieldTypeNS!@@!field.CARD!@@!field.FieldTypeCaps!@ const *
497 get@!field.CARD!@@!field.Name!@ (void) const
498 {
499     return &@!field.VarName!@;
500 }
501
502                 @@if @!CompatOneSix!@
503 #ifdef OSG_1_GET_COMPAT
504 @!field.FieldTypeNS!@@!field.CARD!@@!field.FieldTypeCaps!@ *
505 @!Classname!@Base::get@!field.CARD!@@!field.Name!@(void)
506 {
507     return this->edit@!field.CARD!@@!field.Name!@();
508 }
509 #endif
510                 @@endif // CompatOneSix
511 @!field.FieldTypeNS!@@!field.CARD!@@!field.FieldTypeCaps!@ &
512 @!Classname!@Base::edit@!field.Name!@(void)
513 {
514     editMField(@!field.Name!@FieldMask, @!field.VarName!@);
515
516     return @!field.VarName!@;
517 }
518
519 @!field.FieldTypeNS!@@!field.CARD!@@!field.FieldTypeCaps!@ const &
520 @!Classname!@Base::get@!field.Name!@ (void) const
521 {
522     return @!field.VarName!@;
523 }
524
525 @!field.FieldTypeNS!@@!field.CARD!@@!field.FieldTypeCaps!@::reference
526 @!Classname!@Base::edit@!field.Name!@(UInt32 const index)
527 {
528     editMField(@!field.Name!@FieldMask, @!field.VarName!@);
529    
530     return @!field.VarName!@[index];
531 }
532
533 @!field.FieldTypeNS!@@!field.CARD!@@!field.FieldTypeCaps!@::const_reference
534 @!Classname!@Base::get@!field.Name!@(UInt32 const index) const
535 {
536     return @!field.VarName!@[index];
537 }
538
539                 @@if @!CompatOneSix!@
540 #ifdef OSG_1_GET_COMPAT
541 @!field.FieldTypeNS!@@!field.CARD!@@!field.FieldTypeCaps!@::reference
542 @!Classname!@Base::get@!field.Name!@(UInt32 const index)
543 {
544     return this->edit@!field.Name!@(index);
545 }
546
547 @!field.FieldTypeNS!@@!field.CARD!@@!field.FieldTypeCaps!@ &
548 @!Classname!@Base::get@!field.Name!@(void)
549 {
550     return this->edit@!field.Name!@();
551 }
552 #endif
553                 @@endif // CompatOneSix
554             @@endif // @!field.category!@ == "data"
555             @@if @!field.category!@ == "pointer" and @!field.pointertype!@ != "parent"      // POINTER MField functions
556 @!field.FieldTypeNS!@@!field.CARD!@@!field.FieldTypeCaps!@ *
557 @!Classname!@Base::edit@!field.CARD!@@!field.Name!@(void)
558 {
559     return &@!field.VarName!@;
560 }
561
562 @!field.FieldTypeNS!@@!field.CARD!@@!field.FieldTypeCaps!@ const *
563 @!Classname!@Base::get@!field.CARD!@@!field.Name!@(void) const
564 {
565     return &@!field.VarName!@;
566 }
567
568 @!field.FieldTypeNS!@@!field.CARD!@@!field.FieldTypeCaps!@ &
569 @!Classname!@Base::edit@!field.Name!@(void) const
570 {
571     return @!field.VarName!@;
572 }
573
574 @!field.FieldTypeNS!@@!field.CARD!@@!field.FieldTypeCaps!@ const &
575 @!Classname!@Base::get@!field.Name!@(void) const
576 {
577     return @!field.VarName!@;
578 }
579
580 @!field.FieldTypeNS!@@!field.CARD!@@!field.FieldTypeCaps!@::reference
581 @!Classname!@Base::edit@!field.Name!@(UInt32 const index) const
582 {
583     return @!field.VarName!@[index];
584 }
585
586 @!field.FieldTypeNS!@@!field.CARD!@@!field.FieldTypeCaps!@::const_reference
587 @!Classname!@Base::get@!field.Name!@(UInt32 const index) const
588 {
589     return @!field.VarName!@[index];
590 }
591
592                 @@if @!CompatOneSix!@
593 #ifdef OSG_1_GET_COMPAT
594 @!field.FieldTypeNS!@@!field.CARD!@@!field.FieldTypeCaps!@::reference
595 @!Classname!@Base::get@!field.Name!@(UInt32 const index)
596 {
597     return @!field.VarName!@[index];
598 }
599
600 @!field.FieldTypeNS!@@!field.CARD!@@!field.FieldTypeCaps!@ &
601 @!Classname!@Base::get@!field.Name!@(void)
602 {
603     return @!field.VarName!@;
604 }
605 #endif
606
607                 @@endif
608             @@endif // @!field.category!@ == "pointer" and @!field.pointertype!@ != "parent"
609             @@if @!field.category!@ == "pointer" and @!field.pointertype!@ == "parent"      // PARENTPOINTER MField functions
610 @!field.FieldTypeNS!@@!field.CARD!@@!field.FieldTypeCaps!@ const *
611 @!Classname!@Base::get@!field.CARD!@@!field.Name!@(void) const
612 {
613     return &@!field.VarName!@;
614 }
615
616 @!field.FieldTypeNS!@@!field.CARD!@@!field.FieldTypeCaps!@ const &
617 @!Classname!@Base::get@!field.Name!@(void) const
618 {
619     return @!field.VarName!@;
620 }
621
622 @!field.TypeNS!@@!field.Type!@Const
623 @!Classname!@Base::get@!field.Name!@(UInt32 const index) const
624 {
625     return @!field.VarName!@[index];
626 }
627
628             @@endif // @!field.category!@ == "pointer" and @!field.pointertype!@ == "parent"
629         @@EndMFFieldLoop@@
630     @@else // not isDecorator
631         @@BeginSFFieldLoop@@
632             @@if @!field.category!@ == "data"                                               // DATA SField functions (Decorator)
633 @!field.FieldTypeNS!@@!field.CARD!@@!field.FieldTypeCaps!@ *
634 @!Classname!@Base::edit@!field.CARD!@@!field.Name!@(void)
635 {
636     if(_sfDecoratee.getValue() != NullFC)
637     {
638         return _sfDecoratee.getValue()->edit@!field.CARD!@@!field.Name!@();
639     }
640     else
641     {
642         return Inherited::edit@!field.CARD!@@!field.Name!@();
643     }
644 }
645
646 @!field.FieldTypeNS!@@!field.CARD!@@!field.FieldTypeCaps!@ const *
647 @!Classname!@Base::get@!field.CARD!@@!field.Name!@(void) const
648 {
649     if(_sfDecoratee.getValue() != NullFC)
650     {
651         return _sfDecoratee.getValue()->get@!field.CARD!@@!field.Name!@();
652     }
653     else
654     {
655         return Inherited::get@!field.CARD!@@!field.Name!@();
656     }
657 }
658
659                     @@if @!CompatOneSix!@
660 #ifdef OSG_1_GET_COMPAT
661 @!field.FieldTypeNS!@@!field.CARD!@@!field.FieldTypeCaps!@ *
662 @!Classname!@Base::get@!field.CARD!@@!field.Name!@(void)
663 {
664     this->edit@!field.CARD!@@!field.Name!@();
665 }
666 #endif
667
668                     @@endif // CompatOneSix
669 @!field.FieldTypeNS!@@!field.CARD!@@!field.FieldTypeCaps!@::reference
670 @!Classname!@Base::edit@!field.Name!@(void)
671 {
672     if(_sfDecoratee.getValue() != NullFC)
673     {
674         return _sfDecoratee.getValue()->edit@!field.Name!@();
675     }
676     else
677     {
678         return Inherited::edit@!field.Name!@();
679     }
680 }
681
682 @!field.FieldTypeNS!@@!field.CARD!@@!field.FieldTypeCaps!@::const_reference
683 @!Classname!@Base::get@!field.Name!@(void) const
684 {
685     if(_sfDecoratee.getValue() != NullFC)
686     {
687         return _sfDecoratee.getValue()->get@!field.Name!@();
688     }
689     else
690     {
691         return Inherited::get@!field.Name!@();
692     }
693 }
694
695                     @@if @!CompatOneSix!@
696 #ifdef OSG_1_GET_COMPAT
697 @!field.FieldTypeNS!@@!field.CARD!@@!field.FieldTypeCaps!@::reference
698 @!Classname!@Base::get@!field.Name!@(void)
699 {
700     return this->edit@!field.Name!@();
701 }
702 #endif
703
704                     @@endif // CompatOneSix
705 void
706 @!Classname!@Base::set@!field.Name!@(
707     @!field.FieldTypeNS!@@!field.CARD!@@!field.FieldTypeCaps!@::ArgumentType value)
708 {
709     if(_sfDecoratee.getValue() != NullFC)
710     {
711         _sfDecoratee.getValue()->set@!field.Name!@(value);
712     }
713     else
714     {
715         Inherited::set@!field.Name!@(value);
716     }
717 }
718
719             @@endif // @!field.category!@ == "data"
720             @@if @!field.category!@ == "pointer" and @!field.pointertype!@ != "parent"      // POINTER SField functions (Decorator)
721 @!field.FieldTypeNS!@@!field.CARD!@@!field.FieldTypeCaps!@ *
722 @!Classname!@Base::edit@!field.CARD!@@!field.Name!@(void)
723 {
724     if(_sfDecoratee.getValue() != NullFC)
725     {
726         return _sfDecoratee.getValue()->edit@!field.CARD!@@!field.Name!@();
727     }
728     else
729     {
730         return Inherited::edit@!field.CARD!@@!field.Name!@();
731     }
732 }
733            
734 @!field.FieldTypeNS!@@!field.CARD!@@!field.FieldTypeCaps!@ const *
735 @!Classname!@Base::get@!field.CARD!@@!field.Name!@(void) const
736 {
737     if(_sfDecoratee.getValue() != NullFC)
738     {
739         _sfDecoratee.getValue()->get@!field.CARD!@@!field.Name!@();
740     }
741     else
742     {
743         Inherited::get@!field.CARD!@@!field.Name!@();
744     }
745 }
746
747 @!field.FieldTypeNS!@@!field.CARD!@@!field.FieldTypeCaps!@::const_reference
748 @!Classname!@Base::get@!field.Name!@(void) const
749 {
750     if(_sfDecoratee.getValue() != NullFC)
751     {
752         _sfDecoratee.getValue()->get@!field.Name!@();
753     }
754     else
755     {
756         Inherited::get@!field.Name!@();
757     }
758 }
759    
760 void
761 @!Classname!@Base::set@!field.Name!@(
762     @!field.FieldTypeNS!@@!field.CARD!@@!field.FieldTypeCaps!@::ArgumentType value)
763 {
764     if(_sfDecoratee.getValue() != NullFC)
765     {
766         _sfDecoratee.getValue()->set@!field.Name!@(value);
767     }
768     else
769     {
770         Inherited::set@!field.Name!@(value);
771     }
772 }
773
774             @@endif // @!field.category!@ == "pointer" and @!field.pointertype!@ != "parent"
775             @@if @!field.category!@ == "pointer" and @!field.pointertype!@ == "parent"      // PARENTPOINTER SField functions (Decorator)
776 @!field.FieldTypeNS!@@!field.CARD!@@!field.FieldTypeCaps!@ const *
777 @!Classname!@Base::get@!field.CARD!@@!field.Name!@(void) const
778 {
779     if(_sfDecoratee.getValue() != NullFC)
780     {
781         _sfDecoratee.getValue()->get@!field.CARD!@@!field.Name!@();
782     }
783     else
784     {
785         Inherited::get@!field.CARD!@@!field.Name!@();
786     }
787 }
788
789 @!field.FieldTypeNS!@@!field.CARD!@@!field.FieldTypeCaps!@::const_reference
790 @!Classname!@Base::get@!field.Name!@(void) const
791 {
792     if(_sfDecoratee.getValue() != NullFC)
793     {
794         _sfDecoratee.getValue()->get@!field.Name!@();
795     }
796     else
797     {
798         Inherited::get@!field.Name!@();
799     }
800 }
801
802             @@endif // @!field.category!@ == "pointer" and @!field.pointertype!@ == "parent"
803         @@EndSFFieldLoop@@
804          @@BeginMFFieldLoop@@
805             @@if @!field.category!@ == "data"                                               // DATA MField functions (Decorator)
806 @!field.FieldTypeNS!@@!field.CARD!@@!field.FieldTypeCaps!@ *
807 @!Classname!@Base::edit@!field.CARD!@@!field.Name!@(void)
808 {
809     if(_sfDecoratee.getValue() != NullFC)
810     {
811         return _sfDecoratee.getValue()->edit@!field.CARD!@@!field.Name!@();
812     }
813     else
814     {
815         return Inherited::edit@!field.CARD!@@!field.Name!@();
816     }
817 }
818
819 @!field.FieldTypeNS!@@!field.CARD!@@!field.FieldTypeCaps!@ const *
820 @!Classname!@Base::get@!field.CARD!@@!field.Name!@(void) const
821 {
822     if(_sfDecoratee.getValue() != NullFC)
823     {
824         return _sfDecoratee.getValue()->get@!field.CARD!@@!field.Name!@();
825     }
826     else
827     {
828         return Inherited::get@!field.CARD!@@!field.Name!@();
829     }
830 }
831
832                     @@if @!CompatOneSix!@
833 #ifdef OSG_1_GET_COMPAT
834 @!field.FieldTypeNS!@@!field.CARD!@@!field.FieldTypeCaps!@ *
835 @!Classname!@Base::get@!field.CARD!@@!field.Name!@(void)
836 {
837     return this->edit@!field.CARD!@@!field.Name!@();
838 }
839 #endif
840
841                     @@endif // CompatOneSix
842 @!field.FieldTypeNS!@@!field.CARD!@@!field.FieldTypeCaps!@ &
843 @!Classname!@Base::edit@!field.Name!@(void)
844 {
845     if(_sfDecoratee.getValue() != NullFC)
846     {
847         return _sfDecoratee.getValue()->edit@!field.Name!@();
848     }
849     else
850     {
851         return Inherited::edit@!field.Name!@();
852     }
853 }
854    
855 @!field.FieldTypeNS!@@!field.CARD!@@!field.FieldTypeCaps!@ const &
856 @!Classname!@Base::get@!field.Name!@(void) const
857 {
858     if(_sfDecoratee.getValue() != NullFC)
859     {
860         return _sfDecoratee.getValue()->get@!field.Name!@();
861     }
862     else
863     {
864         return Inherited::get@!field.Name!@();
865     }
866 }
867
868 @!field.FieldTypeNS!@@!field.CARD!@@!field.FieldTypeCaps!@::reference
869 @!Classname!@Base::edit@!field.Name!@(UInt32 const index)
870 {
871     if(_sfDecoratee.getValue() != NullFC)
872     {
873         return _sfDecoratee.getValue()->edit@!field.Name!@(index);
874     }
875     else
876     {
877         return Inherited::edit@!field.Name!@(index);
878     }
879 }
880    
881 @!field.FieldTypeNS!@@!field.CARD!@@!field.FieldTypeCaps!@::const_reference
882 @!Classname!@Base::get@!field.Name!@(UInt32 const index) const
883 {
884     if(_sfDecoratee.getValue() != NullFC)
885     {
886         return _sfDecoratee.getValue()->get@!field.Name!@(index);
887     }
888     else
889     {
890         return Inherited::get@!field.Name!@(index);
891     }
892 }
893
894                     @@if @!CompatOneSix!@
895 #ifdef OSG_1_GET_COMPAT
896 @!field.FieldTypeNS!@@!field.CARD!@@!field.FieldTypeCaps!@::reference
897 @!Classname!@Base::get@!field.Name!@(UInt32 const index)
898 {
899     return this->edit@!field.Name!@(index);
900 }
901
902 @!field.FieldTypeNS!@@!field.CARD!@@!field.FieldTypeCaps!@ &
903 @!Classname!@Base::get@!field.Name!@(void)
904 {
905     return this->edit@!field.Name!@();
906 }
907 #endif
908
909                     @@endif // CompatOneSix
910             @@endif // @!field.category!@ == "data"
911             @@if @!field.category!@ == "pointer" and @!field.pointertype!@ != "parent"      // POINTER MField functions (Decorator)
912 @!field.FieldTypeNS!@@!field.CARD!@@!field.FIeldTypeCaps!@ *
913 @!Classname!@Base::edit@!field.CARD!@@!field.Name!@(void)
914 {
915     if(_sfDecoratee.getValue() != NullFC)
916     {
917         return _sfDecoratee.getValue()->edit@!field.CARD!@@!field.Name!@();
918     }
919     else
920     {
921         return Inherited::edit@!field.CARD!@@!field.Name!@();
922     }
923 }
924            
925 @!field.FieldTypeNS!@@!field.CARD!@@!field.FieldTypeCaps!@ const *
926 @!Classname!@Base::get@!field.CARD!@@!field.Name!@(void) const
927 {
928     if(_sfDecoratee.getValue() != NullFC)
929     {
930         return _sfDecoratee.getValue()->get@!field.CARD!@@!field.Name!@();
931     }
932     else
933     {
934         return Inherited::get@!field.CARD!@@!field.Name!@();
935     }   
936 }
937
938 @!field.FieldTypeNS!@@!field.CARD!@@!field.FieldTypeCaps!@ const &
939 @!Classname!@Base::get@!field.Name!@(void) const
940 {
941     if(_sfDecoratee.getValue() != NullFC)
942     {
943         return _sfDecoratee.getValue()->get@!field.Name!@();
944     }
945     else
946     {
947         return Inherited::get@!field.Name!@();
948     }   
949 }
950
951 @!field.FieldTypeNS!@@!field.CARD!@@!field.FieldTypeCaps!@::reference
952 @!Classname!@Base::edit@!field.Name!@(UInt32 const index)
953 {
954     if(_sfDecoratee.getValue() != NullFC)
955     {
956         return _sfDecoratee.getValue()->edit@!field.Name!@(index);
957     }
958     else
959     {
960         return Inherited::edit@!field.Name!@(index);
961     }   
962 }
963
964 @!field.FieldTypeNS!@@!field.CARD!@@!field.FieldTypeCaps!@::const_reference
965 @!Classname!@Base::get@!field.Name!@(UInt32 const index) const
966 {
967     if(_sfDecoratee.getValue() != NullFC)
968     {
969         return _sfDecoratee.getValue()->get@!field.Name!@(index);
970     }
971     else
972     {
973         return Inherited::get@!field.Name!@(index);
974     }   
975 }
976
977                 @@if @!CompatOneSix!@
978 #ifdef OSG_1_GET_COMPAT
979 @!field.FieldTypeNS!@@!field.CARD!@@!field.FieldTypeCaps!@::reference
980 @!Classname!@Base::get@!field.Name!@(UInt32 const index)
981 {
982     return this->edit@!field.Name!@(index);
983 }
984
985 @!field.FieldTypeNS!@@!field.CARD!@@!field.FieldTypeCaps!@ &
986 @!Classname!@Base::get@!field.Name!@(void)
987 {
988     return this->edit@!field.Name!@();
989 }
990 #endif
991                 @@endif // @!CompatOneSix!@
992             @@endif // @!field.category!@ == "pointer" and @!field.pointertype!@ != "parent"
993             @@if @!field.category!@ == "pointer" and  @!field.pointertype!@ == "parent"     // PARENTPOINTER MField functions (Decorator)
994 @!field.FieldTypeNS!@@!field.CARD!@@!field.FieldTypeCaps!@ const *
995 @!Classname!@Base::get@!field.CARD!@@!field.Name!@(void) const
996 {
997     if(_sfDecoratee.getValue() != NullFC)
998     {
999         return _sfDecoratee.getValue()->get@!field.CARD!@@!field.Name!@();
1000     }
1001     else
1002     {
1003         return Inherited::get@!field.CARD!@@!field.Name!@();
1004     }   
1005 }
1006
1007 @!field.FieldTypeNS!@@!field.CARD!@@!field.FieldTypeCaps!@ const &
1008 @!Classname!@Base::get@!field.Name!@(void) const
1009 {
1010     if(_sfDecoratee.getValue() != NullFC)
1011     {
1012         return _sfDecoratee.getValue()->get@!field.Name!@();
1013     }
1014     else
1015     {
1016         return Inherited::get@!field.Name!@();
1017     }
1018 }
1019
1020 @!field.FieldTypeNS!@@!field.CARD!@@!field.FieldTypeCaps!@::const_reference
1021 @!Classname!@Base::get@!field.Name!@(UInt32 const index) const
1022 {
1023     if(_sfDecoratee.getValue() != NullFC)
1024     {
1025         return _sfDecoratee.getValue()->get@!field.Name!@(index);
1026     }
1027     else
1028     {
1029         return Inherited::get@!field.Name!@(index);
1030     }
1031 }
1032
1033             @@endif // @!field.category!@ == "pointer" and  @!field.pointertype!@ == "parent"
1034         @@EndMFFieldLoop@@
1035     @@endif // not isDecorator
1036 @@endif // isDecoratable
1037
1038 /*------------------------------ access -----------------------------------*/
1039
1040 UInt32 @!Classname!@Base::getBinSize(ConstFieldMaskArg whichField)
1041 {
1042     UInt32 returnValue = Inherited::getBinSize(whichField);
1043
1044 @@if @!isDecorator!@
1045     if(FieldBits::NoField != (DecorateeFieldMask & whichField))
1046     {
1047         returnValue += _sfDecoratee.getBinSize();
1048     }
1049 @@else // isDecorator
1050     @@BeginFieldLoop@@
1051     if(FieldBits::NoField != (@!field.Name!@FieldMask & whichField))
1052     {
1053         returnValue += @!field.VarName!@.getBinSize();
1054     }
1055     @@EndFieldLoop@@
1056 @@endif // isDecorator
1057
1058     return returnValue;
1059 }
1060
1061 void @!Classname!@Base::copyToBin(BinaryDataHandler &pMem,
1062                                   ConstFieldMaskArg  whichField)
1063 {
1064     Inherited::copyToBin(pMem, whichField);
1065
1066 @@if @!isDecorator!@
1067     if(FieldBits::NoField != (DecorateeFieldMask & whichField))
1068     {
1069         _sfDecoratee.copyToBin(pMem);
1070     }
1071 @@else // isDecorator
1072     @@BeginFieldLoop@@
1073     if(FieldBits::NoField != (@!field.Name!@FieldMask & whichField))
1074     {
1075         @!field.VarName!@.copyToBin(pMem);
1076     }
1077     @@EndFieldLoop@@
1078 @@endif // isDecorator
1079 }
1080
1081 void @!Classname!@Base::copyFromBin(BinaryDataHandler &pMem,
1082                                     ConstFieldMaskArg  whichField)
1083 {
1084     Inherited::copyFromBin(pMem, whichField);
1085
1086 @@if @!isDecorator!@
1087     if(FieldBits::NoField != (DecorateeFieldMask & whichField))
1088     {
1089         _sfDecoratee.copyFromBin(pMem);
1090     }
1091 @@else // isDecorator
1092     @@BeginFieldLoop@@
1093     if(FieldBits::NoField != (@!field.Name!@FieldMask & whichField))
1094     {
1095         @!field.VarName!@.copyFromBin(pMem);
1096     }
1097     @@EndFieldLoop@@
1098 @@endif // isDecorator
1099 }
1100
1101 @@if @!hasParentPtrFields!@
1102 bool
1103 @!Classname!@Base::linkParent(
1104     ReflexiveContainer * const pParent,
1105     UInt16               const childrenFieldId,
1106     UInt16               const parentFieldId   )
1107 {
1108     bool retVal = Inherited::linkParent(pParent, childrenFieldId, parentFieldId);
1109
1110     @@BeginFieldLoop@@
1111         @@if @!field.category!@ == "pointer" and @!field.pointertype!@ == "parent"
1112     if(@!field.Name!@FieldId == parentFieldId)
1113     {
1114         @!field.TypeNS!@@!field.Type!@ pTypedParent(
1115             dynamic_cast< @!field.FieldTypeNS!@@!field.CARD!@@!field.FieldType!@::Object * >(pParent),
1116             childrenFieldId);
1117                
1118         if(pTypedParent.getPointer() != NullFC)
1119         {
1120             @@if @!field.cardinality!@ == "single"
1121             if(@!field.VarName!@.getValue().getPointer() != NullFC)
1122             {
1123                 unlinkParent(
1124                     @!field.VarName!@.getValue().getPointer        (),
1125                     @!field.VarName!@.getValue().getChildrenFieldId(),
1126                     parentFieldId                                     );
1127             }
1128            
1129             @!field.VarName!@.setValue(pTypedParent);
1130             @@endif // @!field.cardinality!@ == "single"
11