daeBool daeElement::placeElementAfter( daeElement *marker, daeElement *element ) { if (marker == NULL || element == NULL || marker->getXMLParentElement() != this ) { return false; } if ( _meta->getContents() != NULL ) { size_t idx; daeElementRefArray* contents = (daeElementRefArray*)_meta->getContents()->getWritableMemory(this); if ( contents->find( marker, idx ) != DAE_OK ) { return false; } return placeElementAt( (daeInt)idx+1, element ); } if ( strcmp( marker->getTypeName(), element->getTypeName() ) == 0 ) { daeMetaElementAttribute *mea = _meta->getChildMetaElementAttribute( element->getTypeName() ); daeElementRefArray* era = (daeElementRefArray*)mea->getWritableMemory(this); size_t idx; if ( era->find( marker, idx ) != DAE_OK ) { return false; } era->insertAt( idx+1, element ); return true; } return placeElement( element ); }
daeElement* daeElement::createAndPlaceAt(daeInt index, daeString className) { daeElementRef elem = _meta->create(className); daeBool place = false; if (elem != NULL) place = placeElementAt(index, elem); if (place) return elem; return NULL; }