187ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk/*
287ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk* Copyright 2006 Sony Computer Entertainment Inc.
387ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk*
487ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk* Licensed under the MIT Open Source License, for details please see license.txt or the website
587ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk* http://www.opensource.org/licenses/mit-license.php
687ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk*
787ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk*/
887ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk
987ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk#ifndef __domGlsl_newarray_type_h__
1087ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk#define __domGlsl_newarray_type_h__
1187ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk
1287ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk#include <dae/daeDocument.h>
1387ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk#include <dom/domTypes.h>
1487ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk#include <dom/domElements.h>
1587ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk
1687ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk#include <dom/domGlsl_param_type.h>
1787ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk#include <dom/domGlsl_newarray_type.h>
1887ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchoukclass DAE;
1987ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk
2087ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk/**
2187ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk * The glsl_newarray_type is used to creates a parameter of a one-dimensional
2287ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk * array type.
2387ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk */
2487ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchoukclass domGlsl_newarray_type_complexType
2587ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk{
2687ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchoukprotected:  // Attribute
2787ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk/**
2887ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk *  The length attribute specifies the length of the array.
2987ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk */
3087ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk	xsPositiveInteger attrLength;
3187ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk
3287ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchoukprotected:  // Elements
3387ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk	domGlsl_param_type_Array elemGlsl_param_type_array;
3487ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk/**
3587ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk * You may recursively nest glsl_newarray elements to create multidimensional
3687ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk * arrays. @see domArray
3787ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk */
3887ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk	domGlsl_newarray_type_Array elemArray_array;
3987ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk	/**
4087ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk	 * Used to preserve order in elements that do not specify strict sequencing of sub-elements.
4187ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk	 */
4287ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk	daeElementRefArray _contents;
4387ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk	/**
4487ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk	 * Used to preserve order in elements that have a complex content model.
4587ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk	 */
4687ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk	daeUIntArray       _contentsOrder;
4787ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk
4887ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk	/**
4987ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk	 * Used to store information needed for some content model objects.
5087ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk	 */
5187ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk	daeTArray< daeCharArray * > _CMData;
5287ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk
5387ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk
5487ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchoukpublic:	//Accessors and Mutators
5587ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk	/**
5687ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk	 * Gets the length attribute.
5787ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk	 * @return Returns a xsPositiveInteger of the length attribute.
5887ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk	 */
5987ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk	xsPositiveInteger getLength() const { return attrLength; }
6087ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk	/**
6187ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk	 * Sets the length attribute.
6287ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk	 * @param atLength The new value for the length attribute.
6387ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk	 */
6487ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk	void setLength( xsPositiveInteger atLength ) { attrLength = atLength; }
6587ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk
6687ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk	/**
6787ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk	 * Gets the glsl_param_type element array.
6887ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk	 * @return Returns a reference to the array of glsl_param_type elements.
6987ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk	 */
7087ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk	domGlsl_param_type_Array &getGlsl_param_type_array() { return elemGlsl_param_type_array; }
7187ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk	/**
7287ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk	 * Gets the glsl_param_type element array.
7387ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk	 * @return Returns a constant reference to the array of glsl_param_type elements.
7487ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk	 */
7587ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk	const domGlsl_param_type_Array &getGlsl_param_type_array() const { return elemGlsl_param_type_array; }
7687ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk	/**
7787ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk	 * Gets the array element array.
7887ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk	 * @return Returns a reference to the array of array elements.
7987ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk	 */
8087ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk	domGlsl_newarray_type_Array &getArray_array() { return elemArray_array; }
8187ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk	/**
8287ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk	 * Gets the array element array.
8387ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk	 * @return Returns a constant reference to the array of array elements.
8487ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk	 */
8587ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk	const domGlsl_newarray_type_Array &getArray_array() const { return elemArray_array; }
8687ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk	/**
8787ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk	 * Gets the _contents array.
8887ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk	 * @return Returns a reference to the _contents element array.
8987ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk	 */
9087ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk	daeElementRefArray &getContents() { return _contents; }
9187ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk	/**
9287ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk	 * Gets the _contents array.
9387ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk	 * @return Returns a constant reference to the _contents element array.
9487ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk	 */
9587ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk	const daeElementRefArray &getContents() const { return _contents; }
9687ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk
9787ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchoukprotected:
9887ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk	/**
9987ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk	 * Constructor
10087ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk	 */
10187ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk	domGlsl_newarray_type_complexType(DAE& dae, daeElement* elt) : attrLength(), elemGlsl_param_type_array(), elemArray_array() {}
10287ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk	/**
10387ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk	 * Destructor
10487ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk	 */
10587ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk	virtual ~domGlsl_newarray_type_complexType() { daeElement::deleteCMDataArray(_CMData); }
10687ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk	/**
10787ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk	 * Overloaded assignment operator
10887ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk	 */
10987ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk	virtual domGlsl_newarray_type_complexType &operator=( const domGlsl_newarray_type_complexType &cpy ) { (void)cpy; return *this; }
11087ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk};
11187ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk
11287ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk/**
11387ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk * An element of type domGlsl_newarray_type_complexType.
11487ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk */
11587ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchoukclass domGlsl_newarray_type : public daeElement, public domGlsl_newarray_type_complexType
11687ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk{
11787ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchoukpublic:
11887ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk	virtual COLLADA_TYPE::TypeEnum getElementType() const { return COLLADA_TYPE::GLSL_NEWARRAY_TYPE; }
11987ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk	static daeInt ID() { return 103; }
12087ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk	virtual daeInt typeID() const { return ID(); }
12187ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk
12287ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchoukpublic:	//Accessors and Mutators
12387ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk	/**
12487ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk	 * Gets the length attribute.
12587ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk	 * @return Returns a xsPositiveInteger of the length attribute.
12687ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk	 */
12787ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk	xsPositiveInteger getLength() const { return attrLength; }
12887ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk	/**
12987ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk	 * Sets the length attribute.
13087ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk	 * @param atLength The new value for the length attribute.
13187ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk	 */
13287ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk	void setLength( xsPositiveInteger atLength ) { attrLength = atLength; _validAttributeArray[0] = true; }
13387ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk
13487ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchoukprotected:
13587ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk	/**
13687ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk	 * Constructor
13787ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk	 */
13887ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk	domGlsl_newarray_type(DAE& dae) : daeElement(dae), domGlsl_newarray_type_complexType(dae, this) {}
13987ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk	/**
14087ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk	 * Destructor
14187ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk	 */
14287ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk	virtual ~domGlsl_newarray_type() {}
14387ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk	/**
14487ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk	 * Overloaded assignment operator
14587ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk	 */
14687ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk	virtual domGlsl_newarray_type &operator=( const domGlsl_newarray_type &cpy ) { (void)cpy; return *this; }
14787ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk
14887ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchoukpublic: // STATIC METHODS
14987ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk	/**
15087ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk	 * Creates an instance of this class and returns a daeElementRef referencing it.
15187ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk	 * @return a daeElementRef referencing an instance of this object.
15287ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk	 */
15387ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk	static DLLSPEC daeElementRef create(DAE& dae);
15487ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk	/**
15587ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk	 * Creates a daeMetaElement object that describes this element in the meta object reflection framework.
15687ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk	 * If a daeMetaElement already exists it will return that instead of creating a new one.
15787ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk	 * @return A daeMetaElement describing this COLLADA element.
15887ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk	 */
15987ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk	static DLLSPEC daeMetaElement* registerElement(DAE& dae);
16087ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk};
16187ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk
16287ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk
16387ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk#endif
164