ObjectData

Добавлен , не публикуется
library ObjectData
{
    //2.0
    //1D config
    //использовать массивы размерностью более JASS_MAX_ARRAY_SIZE
    #define private useExtendedArrays = false;
    //размерность, не более 409550
    #define private extendSize = 100000;
     
    //2D config
    // !!! typeMaxSize*objectsMaxSize not more then  409550 !!!
    #define private typeMaxSize = 20;
    #define private objectsMaxSize = 400;
    
    //1D
    #if (useExtendedArrays)
        public integer array integerArray[extendSize]
        public real array realArray[extendSize]
        public string array stringArray[extendSize]
        public boolean array booleanArray[extendSize]
        public location array locationArray[extendSize]
        public ability array abilityArray[extendSize]
        public button array buttonArray[extendSize]
        public handle array handleArray[extendSize]
        public widget array widgetArray[extendSize]
        public destructable array destructableArray[extendSize]
        public fogmodifier array fogmodifierArray[extendSize]
        public force array forceArray[extendSize]
        public image array imageArray[extendSize]
        public itempool array itempoolArray[extendSize]
        public leaderboard array leaderboardArray[extendSize]
        public lightning array lightningArray[extendSize]
        public multiboard array multiboardArray[extendSize]
        public multiboarditem array multiboarditemArray[extendSize]
        public player array playerArray[extendSize]
        public quest array questArray[extendSize]
        public sound array soundArray[extendSize]
        public texttag array texttagArray[extendSize]
        public timerdialog array timerdialogArray[extendSize]
        public trackable array trackableArray[extendSize]
        public triggeraction array triggeractionArray[extendSize]
        public triggercondition array triggerconditionArray[extendSize]
        public event array eventArray[extendSize]
        public trigger array triggerArray[extendSize]
        public ubersplat array ubersplatArray[extendSize]
        public unit array unitArray[extendSize]
        public unitpool array unitpoolArray[extendSize] 
    #else
        public integer array integerArray
        public real array realArray
        public string array stringArray
        public boolean array booleanArray
        public location array locationArray
        public ability array abilityArray
        public button array buttonArray
        public handle array handleArray
        public widget array widgetArray
        public destructable array destructableArray
        public fogmodifier array fogmodifierArray
        public force array forceArray
        public image array imageArray
        public itempool array itempoolArray
        public leaderboard array leaderboardArray
        public lightning array lightningArray
        public multiboard array multiboardArray
        public multiboarditem array multiboarditemArray
        public player array playerArray
        public quest array questArray
        public sound array soundArray
        public texttag array texttagArray
        public timerdialog array timerdialogArray
        public trackable array trackableArray
        public triggeraction array triggeractionArray
        public triggercondition array triggerconditionArray
        public event array eventArray
        public trigger array triggerArray
        public ubersplat array ubersplatArray
        public unit array unitArray
        public unitpool array unitpoolArray
    #endif
    
    

    //2D
    public integer array integerArray2D[objectsMaxSize][typeMaxSize]
    public real array realArray2D[objectsMaxSize][typeMaxSize]
    public string array stringArray2D[objectsMaxSize][typeMaxSize]
    public boolean array booleanArray2D[objectsMaxSize][typeMaxSize]
    public location array locationArray2D[objectsMaxSize][typeMaxSize]
    public ability array abilityArray2D[objectsMaxSize][typeMaxSize]
    public button array buttonArray2D[objectsMaxSize][typeMaxSize]
    public handle array handleArray2D[objectsMaxSize][typeMaxSize]
    public widget array widgetArray2D[objectsMaxSize][typeMaxSize]
    public destructable array destructableArray2D[objectsMaxSize][typeMaxSize]
    public fogmodifier array fogmodifierArray2D[objectsMaxSize][typeMaxSize]
    public force array forceArray2D[objectsMaxSize][typeMaxSize]
    public image array imageArray2D[objectsMaxSize][typeMaxSize]
    public itempool array itempoolArray2D[objectsMaxSize][typeMaxSize]
    public leaderboard array leaderboardArray2D[objectsMaxSize][typeMaxSize]
    public lightning array lightningArray2D[objectsMaxSize][typeMaxSize]
    public multiboard array multiboardArray2D[objectsMaxSize][typeMaxSize]
    public multiboarditem array multiboarditemArray2D[objectsMaxSize][typeMaxSize]
    public player array playerArray2D[objectsMaxSize][typeMaxSize]
    public quest array questArray2D[objectsMaxSize][typeMaxSize]
    public sound array soundArray2D[objectsMaxSize][typeMaxSize]
    public texttag array texttagArray2D[objectsMaxSize][typeMaxSize]
    public timerdialog array timerdialogArray2D[objectsMaxSize][typeMaxSize]
    public trackable array trackableArray2D[objectsMaxSize][typeMaxSize]
    public triggeraction array triggeractionArray2D[objectsMaxSize][typeMaxSize]
    public triggercondition array triggerconditionArray2D[objectsMaxSize][typeMaxSize]
    public event array eventArray2D[objectsMaxSize][typeMaxSize]
    public trigger array triggerArray2D[objectsMaxSize][typeMaxSize]
    public ubersplat array ubersplatArray2D[objectsMaxSize][typeMaxSize]
    public unit array unitArray2D[objectsMaxSize][typeMaxSize]
    public unitpool array unitpoolArray2D[objectsMaxSize][typeMaxSize]

    
    #define 
    {
        //1D
        Save(type,objectId, data) = ObjectData_##type##Array[objectId] = data;
        Load(type,objectId) = ObjectData_##type##Array[objectId];
        Clear(type,objectId) = 
        {
            #if (type == int)
                ObjectData_##type##Array[objectId] = 0;
            #elseif (type == float)
                ObjectData_##type##Array[objectId] = 0.0;
            #elseif (type == bool)
                ObjectData_##type##Array[objectId] = false;
            #else
                ObjectData_##type##Array[objectId] = null;
            #endif
        }
        //#endif
        
        //2D
        Save(type,objectId, cellId, data) = ObjectData_##type##Array2D[objectId][cellId] = data;
        Load(type,objectId, cellId) = ObjectData_##type##Array2D[objectId][cellId];
        Clear(type,objectId, cellId) = 
        {
            #if (type == int)
                ObjectData_##type##Array2D[objectId][cellId] = 0;
            #elseif (type == float)
                ObjectData_##type##Array2D[objectId][cellId] = 0.0;
            #elseif (type == bool)
                ObjectData_##type##Array2D[objectId][cellId] = false;
            #else
                ObjectData_##type##Array2D[objectId][cellId] = null;
            #endif
        }
    }
}
Пример использования:
//key - ключем является int рекомендуется использовать библиотеку Indexer

int key = 0;
int value = 0;
// сохраняем
Save(int,key,value);
// загружаем
Load(int,key);
// очищаем
Clear(int,key);

int key1 = 1;
int key1 = 2;
int value = 3;
Save(int, key1, key2 ,value); // Save(integer,key1, key2 ,value)) так же работает.
int i = Load(int, key1, key2);

// работает корректно:
Save(int,0,0,Load(int,0,0)++);

// данные не будут переписаны, так как фактически данные будут располагаться в разных массивах
Save(int,0,0,0)
Save(real,0,0,0.0)
Так как это обычные двумерные массивы, скорость работы превосходит скорость работы хештаблицы(на ~30%).
Миссия данной системы - сократить количество создаваемых глобалок для разных мелочей. При использовании совместо с этой библиотекой может служить заменой ХТ.
`
ОЖИДАНИЕ РЕКЛАМЫ...