Home | History | Annotate | Download | only in dae
      1 /*
      2 * Copyright 2006 Sony Computer Entertainment Inc.
      3 *
      4 * Licensed under the MIT Open Source License, for details please see license.txt or the website
      5 * http://www.opensource.org/licenses/mit-license.php
      6 *
      7 */
      8 
      9 #include <dae/daeMetaSequence.h>
     10 
     11 daeMetaSequence::daeMetaSequence( daeMetaElement *container, daeMetaCMPolicy *parent, daeUInt ordinal,
     12 									daeInt minO, daeInt maxO) :
     13 									daeMetaCMPolicy( container, parent, ordinal, minO, maxO )
     14 {}
     15 
     16 daeMetaSequence::~daeMetaSequence()
     17 {}
     18 
     19 daeElement *daeMetaSequence::placeElement( daeElement *parent, daeElement *child, daeUInt &ordinal, daeInt offset, daeElement* before, daeElement *after ) {
     20 	(void)offset;
     21 	if ( _maxOccurs == -1 ) {
     22 		//Needed to prevent infinate loops. If unbounded check to see if you have the child before just trying to place
     23 		if ( findChild( child->getElementName() ) == NULL ) {
     24 			return NULL;
     25 		}
     26 	}
     27 
     28 	size_t cnt = _children.getCount();
     29 	for ( daeInt i = 0; ( i < _maxOccurs || _maxOccurs == -1 ); i++ ) {
     30 		for ( size_t x = 0; x < cnt; x++ ) {
     31 			if ( _children[x]->placeElement( parent, child, ordinal, i, before, after ) != NULL ) {
     32 				ordinal = ordinal + (i * ( _maxOrdinal + 1 )) + _ordinalOffset;
     33 				return child;
     34 			}
     35 		}
     36 	}
     37 	return NULL;
     38 }
     39 
     40 daeBool daeMetaSequence::removeElement( daeElement *parent, daeElement *child ) {
     41 	size_t cnt = _children.getCount();
     42 	for ( size_t x = 0; x < cnt; x++ ) {
     43 		if ( _children[x]->removeElement( parent, child ) ) {
     44 			return true;
     45 		}
     46 	}
     47 	return false;
     48 }
     49 
     50 daeMetaElement * daeMetaSequence::findChild( daeString elementName ) {
     51 	daeMetaElement *me = NULL;
     52 	size_t cnt = _children.getCount();
     53 	for ( size_t x = 0; x < cnt; x++ ) {
     54 		me = _children[x]->findChild( elementName );
     55 		if ( me != NULL ) {
     56 			return me;
     57 		}
     58 	}
     59 	return NULL;
     60 }
     61 
     62 void daeMetaSequence::getChildren( daeElement *parent, daeElementRefArray &array ) {
     63 	size_t cnt = _children.getCount();
     64 	for ( size_t x = 0; x < cnt; x++ ) {
     65 		_children[x]->getChildren( parent, array );
     66 	}
     67 }
     68