text: /*
   * Copyright 2006 Sony Computer Entertainment Inc.
   *
   * Licensed under the SCEA Shared Source License, Version 1.0 (the "License"); you may not use this
   * file except in compliance with the License. You may obtain a copy of the License at:
   * http://research.scea.com/scea_shared_source_license.html
   *
   * Unless required by applicable law or agreed to in writing, software distributed under the License
   * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
   * implied. See the License for the specific language governing permissions and limitations under the
   * License.
   */
  
  #include <dae.h>
  #include <dae/daeDom.h>
  #include <dom/domCg_setparam.h>
  #include <dae/daeMetaCMPolicy.h>
  #include <dae/daeMetaSequence.h>
  #include <dae/daeMetaChoice.h>
  #include <dae/daeMetaGroup.h>
  #include <dae/daeMetaAny.h>
  #include <dae/daeMetaElementAttribute.h>
  
  daeElementRef
  domCg_setparam::create(DAE& dae)
  {
  	domCg_setparamRef ref = new domCg_setparam(dae);
  	return ref;
  }
  
  
  daeMetaElement *
  domCg_setparam::registerElement(DAE& dae)
  {
  	daeMetaElement* meta = dae.getMeta(ID());
  	if ( meta != NULL ) return meta;
  
  	meta = new daeMetaElement(dae);
  	dae.setMeta(ID(), *meta);
  	meta->setName( "cg_setparam" );
  	meta->registerClass(domCg_setparam::create);
  
  	daeMetaCMPolicy *cm = NULL;
  	daeMetaElementAttribute *mea = NULL;
  	cm = new daeMetaChoice( meta, cm, 0, 0, 1, 1 );
  
  	mea = new daeMetaElementAttribute( meta, cm, 0, 1, 1 );
  	mea->setName( "cg_param_type" );
  	mea->setOffset( daeOffsetOf(domCg_setparam,elemCg_param_type) );
  	mea->setElementType( domCg_param_type::registerElement(dae) );
  	cm->appendChild( new daeMetaGroup( mea, meta, cm, 0, 1, 1 ) );
  
  	mea = new daeMetaElementAttribute( meta, cm, 0, 1, 1 );
  	mea->setName( "usertype" );
  	mea->setOffset( daeOffsetOf(domCg_setparam,elemUsertype) );
  	mea->setElementType( domCg_setuser_type::registerElement(dae) );
  	cm->appendChild( mea );
  
  	mea = new daeMetaElementAttribute( meta, cm, 0, 1, 1 );
  	mea->setName( "array" );
  	mea->setOffset( daeOffsetOf(domCg_setparam,elemArray) );
  	mea->setElementType( domCg_setarray_type::registerElement(dae) );
  	cm->appendChild( mea );
  
  	mea = new daeMetaElementAttribute( meta, cm, 0, 1, 1 );
  	mea->setName( "connect_param" );
  	mea->setOffset( daeOffsetOf(domCg_setparam,elemConnect_param) );
  	mea->setElementType( domCg_connect_param::registerElement(dae) );
  	cm->appendChild( mea );
  
  	cm->setMaxOrdinal( 0 );
  	meta->setCMRoot( cm );	
  	// Ordered list of sub-elements
  	meta->addContents(daeOffsetOf(domCg_setparam,_contents));
  	meta->addContentsOrder(daeOffsetOf(domCg_setparam,_contentsOrder));
  
  	meta->addCMDataArray(daeOffsetOf(domCg_setparam,_CMData), 1);
  	//	Add attribute: ref
  	{
  		daeMetaAttribute *ma = new daeMetaAttribute;
  		ma->setName( "ref" );
  		ma->setType( dae.getAtomicTypes().get("Cg_identifier"));
  		ma->setOffset( daeOffsetOf( domCg_setparam , attrRef ));
  		ma->setContainer( meta );
  		ma->setIsRequired( true );
  	
  		meta->appendAttribute(ma);
  	}
  
  	//	Add attribute: program
  	{
  		daeMetaAttribute *ma = new daeMetaAttribute;
  		ma->setName( "program" );
  		ma->setType( dae.getAtomicTypes().get("xsNCName"));
  		ma->setOffset( daeOffsetOf( domCg_setparam , attrProgram ));
  		ma->setContainer( meta );
  	
  		meta->appendAttribute(ma);
  	}
  
  	meta->setElementSize(sizeof(domCg_setparam));
  	meta->validate();
  
  	return meta;
  }
  
  