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 __DAE_ARRAY_H__ 1087ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk#define __DAE_ARRAY_H__ 1187ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk#include <new> 1287ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk#include <dae/daeMemorySystem.h> 1387ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk 1487ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchoukclass daeAtomicType; 1587ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk 1687ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk/** 1787ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk * COLLADA C++ class that implements storage for resizable array containers. 1887ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk */ 1987ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchoukclass daeArray 2087ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk{ 2187ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchoukprotected: 2287ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk size_t _count; 2387ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk size_t _capacity; 2487ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk daeMemoryRef _data; 2587ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk size_t _elementSize; 2687ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk daeAtomicType* _type; 2787ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchoukpublic: 2887ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk /** 2987ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk * Constructor 3087ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk */ 3187ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk DLLSPEC daeArray(); 3287ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk /** 3387ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk * Destructor 3487ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk */ 3587ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk virtual DLLSPEC ~daeArray(); 3687ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk /** 3787ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk * Clears the contents of the array. Do not use this function if the array contains @c daeSmartRef objects and the 3887ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk * @c dom* class the array belongs to has a @c _contents member. 3987ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk * 4087ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk * Many @c dom* objects have a @c _contents member that stores the original creation order of the @c daeElements 4187ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk * that are their children. If you use @c clear() on a @c daeArray of @c daeSmartRef derived objects, these 4287ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk * objects will not be removed from @c _contents, which can cause problems when you 4387ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk * save the data. We recommended that @c clear() not be used on arrays that are part of a @c dom* object. 4487ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk */ 4587ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk virtual DLLSPEC void clear() = 0; 4687ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk /** 4787ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk * Sets the size of an element in the array. This clears and reinitializes the array. 4887ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk * @param elementSize Size of an element in the array. 4987ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk */ 5087ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk DLLSPEC void setElementSize(size_t elementSize); 5187ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk /** 5287ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk * Gets the size of an element in this array. 5387ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk * @return Returns the size of an element in this array. 5487ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk */ 5587ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk size_t getElementSize() const {return _elementSize;} 5687ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk /** 5787ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk * Grows the array to the specified size and sets the @c daeArray to that size. 5887ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk * @param cnt Size to grow the array to. 5987ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk */ 6087ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk virtual void setCount(size_t cnt) = 0; 6187ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk /** 6287ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk * Gets the number of items stored in this @c daeArray. 6387ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk * @return Returns the number of items stored in this @c daeArray. 6487ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk */ 6587ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk size_t getCount() const {return _count;} 6687ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk /** 6787ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk * Increases the capacity of the @c daeArray. 6887ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk * @param minCapacity The minimum array capacity (the actual resulting capacity may be higher). 6987ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk */ 7087ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk virtual void grow(size_t minCapacity) = 0; 7187ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk /** 7287ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk * Gets the current capacity of the array, the biggest it can get without incurring a realloc. 7387ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk * @return Returns the capacity of the array. 7487ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk */ 7587ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk size_t getCapacity() const {return _capacity;} 7687ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk /** 7787ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk * Gets a pointer to the raw memory of a particular element. 7887ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk * @return Returns a pointer to the memory for the raw data. 7987ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk */ 8087ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk daeMemoryRef getRaw(size_t index) const {return _data + index*_elementSize;} 8187ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk /** 8287ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk * Removes an item at a specific index in the @c daeArray. 8387ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk * @param index Index number of the item to delete. 8487ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk * @return Returns DAE_OK if success, a negative value defined in daeError.h otherwise. 8587ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk * @note The @c daeElement objects sometimes list 8687ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk * objects in two places, the class member and the <i> @c _contents </i> array, when you remove something from the 8787ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk * dom, you must remove it from both places. 8887ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk */ 8987ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk virtual daeInt removeIndex(size_t index) = 0; 9087ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk 9187ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk // Provided for backward compatibility only. Don't use these. 9287ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk void setRawCount(size_t cnt) { setCount(cnt); } // Use setCount instead 9387ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk daeMemoryRef getRawData() const {return _data;} // Use getRaw instead 9487ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk}; 9587ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk 9687ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk/** 9787ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk * COLLADA C++ templated version of @c daeArray for storing items of various types. 9887ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk */ 9987ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouktemplate <class T> 10087ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchoukclass daeTArray : public daeArray 10187ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk{ 10287ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchoukprotected: 10387ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk T* prototype; 10487ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchoukpublic: 10587ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk /** 10687ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk * Constructor. 10787ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk */ 10887ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk daeTArray() { 10987ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk _elementSize = sizeof( T ); 11087ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk prototype = NULL; 11187ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk } 11287ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk /** 11387ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk * Constructor. 11487ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk */ 11587ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk explicit daeTArray(T* prototype) : prototype(prototype) { 11687ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk _elementSize = sizeof( T ); 11787ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk } 11887ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk /** 11987ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk * Copy Constructor 12087ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk */ 12187ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk daeTArray( const daeTArray<T> &cpy ) : daeArray() { 12287ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk prototype = NULL; 12387ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk *this = cpy; 12487ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk } 12587ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk /** 12687ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk * Constructor that takes one element and turns into an array 12787ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk */ 12887ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk explicit daeTArray( const T &el ) { 12987ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk _elementSize = sizeof(T); 13087ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk prototype = NULL; 13187ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk append( el ); 13287ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk } 13387ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk /** 13487ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk * Destructor. 13587ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk */ 13687ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk virtual ~daeTArray() { 13787ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk clear(); 13887ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk delete prototype; 13987ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk } 14087ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk /** 14187ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk * Frees the memory in this array and resets it to it's initial state. 14287ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk */ 14387ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk virtual void clear() 14487ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk { 14587ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk for(size_t i=0;i<_count;i++) 14687ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk ((T*)_data + i)->~T(); 14787ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk free(_data); 14887ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk _count = 0; 14987ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk _capacity = 0; 15087ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk _data = NULL; 15187ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk } 15287ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk 15387ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk /** 15487ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk * Increases the capacity of the @c daeArray. 15587ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk * @param minCapacity The minimum array capacity (the actual resulting capacity may be higher). 15687ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk */ 15787ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk void grow(size_t minCapacity) { 15887ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk if (minCapacity <= _capacity) 15987ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk return; 16087ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk 16187ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk size_t newCapacity = _capacity == 0 ? 1 : _capacity; 16287ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk while(newCapacity < minCapacity) 16387ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk newCapacity *= 2; 16487ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk 16587ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk T* newData = (T*)malloc(newCapacity*_elementSize); 16687ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk for (size_t i = 0; i < _count; i++) { 16787ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk new (&newData[i]) T(get(i)); 16887ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk ((T*)_data + i)->~T(); 16987ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk } 17087ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk 17187ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk if (_data != NULL) 17287ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk free(_data); 17387ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk 17487ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk _data = (daeMemoryRef)newData; 17587ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk _capacity = newCapacity; 17687ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk } 17787ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk 17887ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk /** 17987ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk * Removes an item at a specific index in the @c daeArray. 18087ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk * @param index Index number of the item to delete. 18187ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk * @return Returns DAE_OK if success, a negative value defined in daeError.h otherwise. 18287ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk * @note The @c daeElement objects sometimes list 18387ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk * objects in two places, the class member and the <i> @c _contents </i> array, when you remove something from the 18487ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk * dom, you must remove it from both places. 18587ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk */ 18687ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk virtual daeInt removeIndex(size_t index) 18787ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk { 18887ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk if (index >= _count) 18987ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk return(DAE_ERR_INVALID_CALL); 19087ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk 19187ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk for (size_t i = index; i < _count-1; i++) 19287ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk *((T*)_data+i) = *((T*)_data+i+1); 19387ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk ((T*)_data+(_count-1))->~T(); 19487ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk _count--; 19587ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk return DAE_OK; 19687ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk } 19787ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk 19887ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk /** 19987ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk * Resets the number of elements in the array. If the array increases in size, the new 20087ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk * elements will be initialized to the specified value. 20187ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk * @param nElements The new size of the array. 20287ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk * @param value The value new elements will be initialized to. 20387ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk * @note Shrinking the array does NOT free up memory. 20487ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk */ 20587ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk void setCount(size_t nElements, const T& value) 20687ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk { 20787ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk grow(nElements); 20887ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk // Destruct the elements that are being chopped off 20987ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk for (size_t i = nElements; i < _count; i++) 21087ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk ((T*)_data+i)->~T(); 21187ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk // Use value to initialize the new elements 21287ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk for (size_t i = _count; i < nElements; i++) 21387ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk new ((void*)((T*)_data+i)) T(value); 21487ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk _count = nElements; 21587ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk } 21687ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk 21787ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk /** 21887ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk * Resets the number of elements in the array. If the array increases in size, the new 21987ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk * elements will be initialized with a default constructor. 22087ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk * @param nElements The new size of the array. 22187ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk * @note Shrinking the array does NOT free up memory. 22287ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk */ 22387ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk virtual void setCount(size_t nElements) { 22487ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk if (prototype) 22587ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk setCount(nElements, *prototype); 22687ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk else 22787ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk setCount(nElements, T()); 22887ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk } 22987ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk 23087ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk /** 23187ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk * Sets a specific index in the @c daeArray, growing the array if necessary. 23287ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk * @param index Index of the object to set, asserts if the index is out of bounds. 23387ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk * @param value Value to store at index in the array. 23487ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk */ 23587ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk void set(size_t index, const T& value) { 23687ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk if (index >= _count) 23787ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk setCount(index+1); 23887ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk ((T*)_data)[index] = value; 23987ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk } 24087ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk 24187ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk /** 24287ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk * Gets the object at a specific index in the @c daeArray. 24387ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk * @param index Index of the object to get, asserts if the index is out of bounds. 24487ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk * @return Returns the object at index. 24587ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk */ 24687ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk T& get(size_t index) { 24787ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk assert(index < _count); 24887ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk return ((T*)_data)[index]; } 24987ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk /** 25087ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk * Gets the object at a specific index in the @c daeArray. 25187ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk * @param index Index of the object to get, asserts if the index is out of bounds. 25287ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk * @return Returns the object at index. 25387ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk */ 25487ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk const T& get(size_t index) const { 25587ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk assert(index < _count); 25687ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk return ((T*)_data)[index]; } 25787ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk 25887ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk /** 25987ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk * Appends a new object to the end of the @c daeArray. 26087ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk * @param value Value of the object to append. 26187ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk * @return Returns the index of the new object. 26287ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk */ 26387ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk size_t append(const T& value) { 26487ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk set(_count, value); 26587ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk return _count-1; 26687ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk } 26787ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk 26887ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk /** 26987ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk * Appends a unique object to the end of the @c daeArray. 27087ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk * Functions the same as @c append(), but does nothing if the value is already in the @c daeArray. 27187ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk * @param value Value of the object to append. 27287ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk * @return Returns the index where this value was appended. If the value already exists in the array, 27387ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk * returns the index in this array where the value was found. 27487ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk */ 27587ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk size_t appendUnique(const T& value) { 27687ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk size_t ret; 27787ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk if (find(value,ret) != DAE_OK) 27887ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk return append(value); 27987ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk else 28087ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk return ret; 28187ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk } 28287ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk 28387ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk /** 28487ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk * Adds a new item to the front of the @c daeArray. 28587ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk * @param value Item to be added. 28687ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk */ 28787ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk void prepend(const T& value) { 28887ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk insertAt(0, value); 28987ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk } 29087ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk 29187ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk /** 29287ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk * Removes an item from the @c daeArray. 29387ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk * @param value A reference to the item to delete. 29487ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk * @return Returns DAE_OK if success, a negative value defined in daeError.h otherwise. 29587ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk * @note The @c daeElement objects sometimes list 29687ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk * objects in two places, the class member and the <i> @c _contents </i> array, when you remove something from the 29787ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk * do, you must remove it from both places. 29887ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk */ 29987ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk daeInt remove(const T& value, size_t *idx = NULL ) 30087ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk { 30187ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk size_t index; 30287ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk if(find(value,index) == DAE_OK) 30387ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk { 30487ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk if ( idx != NULL ) { 30587ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk *idx = index; 30687ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk } 30787ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk return(removeIndex( index )); 30887ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk } 30987ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk else 31087ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk { 31187ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk return(DAE_ERR_INVALID_CALL); 31287ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk } 31387ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk } 31487ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk /** 31587ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk * Finds an item from the @c daeArray. 31687ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk * @param value A reference to the item to find. 31787ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk * @param index If the function returns DAE_OK, this is set to the index where the value appears in the array. 31887ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk * @return Returns DAE_OK if no error or DAE_ERR_QUERY_NO_MATCH if the value was not found. 31987ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk */ 32087ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk daeInt find(const T& value, size_t &index) const 32187ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk { 32287ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk size_t i; 32387ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk for(i=0;i<_count;i++) 32487ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk { 32587ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk if (((T*)_data)[i] == value) 32687ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk { 32787ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk index = i; 32887ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk return DAE_OK; 32987ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk } 33087ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk } 33187ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk 33287ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk return DAE_ERR_QUERY_NO_MATCH; 33387ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk } 33487ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk /** 33587ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk * Just like the previous function, but has a more reasonable interface. 33687ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk * @param value The value to find. 33787ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk * @return Returns a pointer to the value if found, null otherwise. 33887ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk */ 33987ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk T* find(const T& value) const { 34087ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk size_t i; 34187ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk if (find(value, i) == DAE_OK) 34287ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk return get(i); 34387ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk return NULL; 34487ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk } 34587ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk /** 34687ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk * Gets the object at a specific index in the @c daeArray. 34787ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk * @param index Index of the object to get, asserts if the index is out of bounds. 34887ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk * @return Returns the object at @c index. 34987ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk */ 35087ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk T& operator[](size_t index) { 35187ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk assert(index < _count); 35287ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk return ((T*)_data)[index]; } 35387ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk /** 35487ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk * Gets the object at a specific index in the @c daeArray. 35587ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk * @param index Index of the object to get, asserts if the index is out of bounds. 35687ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk * @return Returns the object at @c index. 35787ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk */ 35887ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk const T& operator[](size_t index) const { 35987ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk assert(index < _count); 36087ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk return ((T*)_data)[index]; } 36187ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk 36287ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk /** 36387ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk * Inserts the specified number of elements at a specific location in the array. 36487ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk * @param index Index into the array where the elements will be inserted 36587ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk * @param n The number of elements to insert 36687ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk * @param val The value to insert 36787ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk */ 36887ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk void insert(size_t index, size_t n, const T& val = T()) { 36987ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk if (index >= _count) { 37087ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk // Append to the end of the array 37187ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk size_t oldCount = _count; 37287ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk setCount(index + n); 37387ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk for (size_t i = oldCount; i < _count; i++) 37487ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk get(i) = val; 37587ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk } 37687ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk else { 37787ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk setCount(_count + n); 37887ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk for (size_t i = _count-1; i >= index+n; i--) 37987ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk get(i) = get(i-n); 38087ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk for (size_t i = index; i < index+n; i++) 38187ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk get(i) = val; 38287ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk } 38387ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk } 38487ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk 38587ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk /** 38687ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk * Inserts an object at a specific index in the daeArray, growing the array if neccessary 38787ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk * @param index Index into the array for where to place the object 38887ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk * @param value The object to append 38987ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk */ 39087ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk void insertAt(size_t index, const T& value) { 39187ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk insert(index, 1); 39287ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk get(index) = value; 39387ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk } 39487ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk 39587ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk /** 39687ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk * Overloaded assignment operator. 39787ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk * @param other A reference to the array to copy 39887ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk * @return A reference to this object. 39987ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk */ 40087ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk daeTArray<T> &operator=( const daeTArray<T> &other ) { 40187ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk if (this != &other) { 40287ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk clear(); 40387ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk _elementSize = other._elementSize; 40487ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk _type = other._type; 40587ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk grow(other._count); 40687ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk for(size_t i=0;i<other._count;i++) 40787ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk append(other[i]); 40887ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk } 40987ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk 41087ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk return *this; 41187ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk } 41287ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk 41387ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk /** 41487ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk * Overloaded equality operator 41587ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk * @param other A reference to the other array. 41687ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk * @return true if the arrays are equal, false otherwise. 41787ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk */ 41887ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk bool operator==(const daeTArray<T>& other) { 41987ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk if (getCount() != other.getCount()) 42087ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk return false; 42187ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk for (size_t i = 0; i < getCount(); i++) 42287ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk if (get(i) != other.get(i)) 42387ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk return false; 42487ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk return true; 42587ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk } 42687ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk 42787ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk //some helpers 42887ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk /** 42987ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk * Sets the array to the contain the two values specified. 43087ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk * @param one The first value. 43187ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk * @param two The second value. 43287ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk */ 43387ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk void set2( const T &one, const T &two ) 43487ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk { 43587ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk setCount( 2 ); 43687ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk set( 0, one ); 43787ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk set( 1, two ); 43887ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk } 43987ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk /** 44087ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk * Sets the array to the contain the three values specified. 44187ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk * @param one The first value. 44287ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk * @param two The second value. 44387ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk * @param three The third value. 44487ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk */ 44587ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk void set3( const T &one, const T &two, const T &three ) 44687ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk { 44787ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk setCount( 3 ); 44887ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk set( 0, one ); 44987ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk set( 1, two ); 45087ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk set( 2, three ); 45187ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk } 45287ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk /** 45387ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk * Sets the array to the contain the four values specified. 45487ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk * @param one The first value. 45587ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk * @param two The second value. 45687ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk * @param three The third value. 45787ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk * @param four The fourth value. 45887ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk */ 45987ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk void set4( const T &one, const T &two, const T &three, const T &four ) 46087ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk { 46187ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk setCount( 4 ); 46287ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk set( 0, one ); 46387ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk set( 1, two ); 46487ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk set( 2, three ); 46587ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk set( 3, four ); 46687ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk } 46787ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk 46887ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk /** 46987ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk * Sets the values in the array at the specified location to the contain the two 47087ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk * values specified. This function will grow the array if needed. 47187ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk * @param index The position in the array to start setting. 47287ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk * @param one The first value. 47387ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk * @param two The second value. 47487ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk */ 47587ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk void set2at( size_t index, const T &one, const T &two ) 47687ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk { 47787ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk set( index, one ); 47887ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk set( index+1, two ); 47987ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk } 48087ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk /** 48187ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk * Sets the values in the array at the specified location to the contain the three 48287ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk * values specified. This function will grow the array if needed. 48387ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk * @param index The position in the array to start setting. 48487ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk * @param one The first value. 48587ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk * @param two The second value. 48687ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk * @param three The third value. 48787ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk */ 48887ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk void set3at( size_t index, const T &one, const T &two, const T &three ) 48987ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk { 49087ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk set( index, one ); 49187ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk set( index+1, two ); 49287ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk set( index+2, three ); 49387ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk } 49487ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk /** 49587ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk * Sets the values in the array at the specified location to the contain the four 49687ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk * values specified. This function will grow the array if needed. 49787ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk * @param index The position in the array to start setting. 49887ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk * @param one The first value. 49987ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk * @param two The second value. 50087ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk * @param three The third value. 50187ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk * @param four The fourth value. 50287ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk */ 50387ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk void set4at( size_t index, const T &one, const T &two, const T &three, const T &four ) 50487ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk { 50587ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk set( index, one ); 50687ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk set( index+1, two ); 50787ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk set( index+2, three ); 50887ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk set( index+3, four ); 50987ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk } 51087ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk 51187ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk /** 51287ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk * Appends two values to the array. 51387ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk * @param one The first value. 51487ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk * @param two The second value. 51587ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk */ 51687ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk void append2( const T &one, const T &two ) 51787ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk { 51887ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk append( one ); 51987ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk append( two ); 52087ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk } 52187ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk /** 52287ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk * Appends three values to the array. 52387ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk * @param one The first value. 52487ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk * @param two The second value. 52587ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk * @param three The third value. 52687ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk */ 52787ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk void append3( const T &one, const T &two, const T &three ) 52887ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk { 52987ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk append( one ); 53087ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk append( two ); 53187ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk append( three ); 53287ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk } 53387ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk /** 53487ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk * Appends four values to the array. 53587ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk * @param one The first value. 53687ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk * @param two The second value. 53787ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk * @param three The third value. 53887ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk * @param four The fourth value. 53987ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk */ 54087ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk void append4( const T &one, const T &two, const T &three, const T &four ) 54187ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk { 54287ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk append( one ); 54387ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk append( two ); 54487ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk append( three ); 54587ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk append( four ); 54687ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk } 54787ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk 54887ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk /** 54987ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk * Inserts two values into the array at the specified location. 55087ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk * @param index The position in the array to start inserting. 55187ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk * @param one The first value. 55287ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk * @param two The second value. 55387ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk */ 55487ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk void insert2at( size_t index, const T &one, const T &two ) 55587ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk { 55687ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk insert(index, 2); 55787ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk set(index, one); 55887ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk set(index+1, two); 55987ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk } 56087ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk /** 56187ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk * Inserts three values into the array at the specified location. 56287ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk * @param index The position in the array to start inserting. 56387ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk * @param one The first value. 56487ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk * @param two The second value. 56587ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk * @param three The third value. 56687ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk */ 56787ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk void insert3at( size_t index, const T &one, const T &two, const T &three ) 56887ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk { 56987ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk insert(index, 3); 57087ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk set( index, one ); 57187ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk set( index+1, two ); 57287ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk set( index+2, three ); 57387ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk } 57487ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk /** 57587ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk * Inserts four values into the array at the specified location. 57687ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk * @param index The position in the array to start inserting. 57787ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk * @param one The first value. 57887ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk * @param two The second value. 57987ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk * @param three The third value. 58087ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk * @param four The fourth value. 58187ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk */ 58287ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk void insert4at( size_t index, const T &one, const T &two, const T &three, const T &four ) 58387ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk { 58487ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk insert(index, 4); 58587ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk set( index, one ); 58687ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk set( index+1, two ); 58787ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk set( index+2, three ); 58887ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk set( index+4, four ); 58987ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk } 59087ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk 59187ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk /** 59287ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk * Gets two values from the array at the specified location. 59387ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk * @param index The position in the array to start getting. 59487ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk * @param one Variable to store the first value. 59587ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk * @param two Variable to store the second value. 59687ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk * @return Returns The number of elements retrieved. 59787ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk */ 59887ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk daeInt get2at( size_t index, T &one, T &two ) 59987ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk { 60087ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk daeInt retVal = 0; 60187ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk if ( index < _count ) 60287ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk { 60387ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk one = get(index); 60487ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk retVal++; 60587ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk } 60687ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk if ( index+1 < _count ) 60787ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk { 60887ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk two = get(index+1); 60987ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk retVal++; 61087ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk } 61187ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk return retVal; 61287ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk } 61387ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk /** 61487ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk * Gets three values from the array at the specified location. 61587ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk * @param index The position in the array to start getting. 61687ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk * @param one Variable to store the first value. 61787ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk * @param two Variable to store the second value. 61887ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk * @param three Variable to store the third value. 61987ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk * @return Returns The number of elements retrieved. 62087ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk */ 62187ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk daeInt get3at( size_t index, T &one, T &two, T &three ) 62287ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk { 62387ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk daeInt retVal = 0; 62487ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk if ( index < _count ) 62587ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk { 62687ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk one = get(index); 62787ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk retVal++; 62887ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk } 62987ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk if ( index+1 < _count ) 63087ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk { 63187ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk two = get(index+1); 63287ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk retVal++; 63387ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk } 63487ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk if ( index+2 < _count ) 63587ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk { 63687ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk three = get(index+2); 63787ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk retVal++; 63887ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk } 63987ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk return retVal; 64087ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk } 64187ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk /** 64287ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk * Gets four values from the array at the specified location. 64387ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk * @param index The position in the array to start getting. 64487ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk * @param one Variable to store the first value. 64587ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk * @param two Variable to store the second value. 64687ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk * @param three Variable to store the third value. 64787ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk * @param four Variable to store the fourth value. 64887ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk * @return Returns The number of elements retrieved. 64987ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk */ 65087ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk daeInt get4at( size_t index, T &one, T &two, T &three, T &four ) 65187ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk { 65287ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk daeInt retVal = 0; 65387ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk if ( index < _count ) 65487ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk { 65587ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk one = get(index); 65687ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk retVal++; 65787ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk } 65887ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk if ( index+1 < _count ) 65987ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk { 66087ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk two = get(index+1); 66187ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk retVal++; 66287ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk } 66387ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk if ( index+2 < _count ) 66487ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk { 66587ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk three = get(index+2); 66687ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk retVal++; 66787ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk } 66887ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk if ( index+3 < _count ) 66987ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk { 67087ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk four = get(index+3); 67187ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk retVal++; 67287ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk } 67387ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk return retVal; 67487ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk } 67587ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk 67687ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk /** 67787ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk * Appends a number of elements to this array from a C native array. 67887ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk * @param num The number of elements to append. 67987ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk * @param array The C native array that contains the values to append. 68087ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk */ 68187ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk void appendArray( size_t num, T *array ) 68287ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk { 68387ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk if ( array == NULL ) 68487ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk return; 68587ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk 68687ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk for ( size_t i = 0; i < num; i++ ) 68787ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk append( array[i] ); 68887ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk } 68987ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk /** 69087ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk * Appends a number of elements to this array from another daeTArray. 69187ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk * @param array The daeTArray that contains the values to append. 69287ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk */ 69387ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk void appendArray( const daeTArray<T> &array ){ 69487ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk size_t num = array.getCount(); 69587ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk for ( size_t i = 0; i < num; i++ ) 69687ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk append( array[i] ); 69787ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk } 69887ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk}; 69987ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk 70087ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk 70187ac3e2db6d5ae163131102c066e9d19bdfdc139Alex Sakhartchouk#endif //__DAE_ARRAY_H__ 702