Добавлен , не публикуется
//v 1.5
library Index
{
    public hashtable Data = InitHashtable()
    private int count = 0
    private int slotCount = 0
    private int array buffSlots
    private bool array ValueIsStatic
    private int array staticIndexes
    private int staticIndexesCount;
    
    #define private Value = 0;
    #define private Value2 = 0;
      
    // обнуление значения объекта
    public void Flush(handle h)
    {
        int hId = GetHandleId(h);
        int objectId = LoadInteger(Index_Data,hId,Value);
        if (!ValueIsStatic[objectId] && objectId > 0)
        {
            slotCount++;
            buffSlots[slotCount] = objectId;
            FlushChildHashtable(Index_Data,hId)
        }
    }
    
    // удаление объекта с обнулением
    #define Index_Remove(objectType, object) = 
    {
        #if(objectType == unit)
            RemoveUnit(object);
        #elseif(objectType == timer)
            PauseTimer(object);
            DestroyTimer(object);
        #elseif (objectType == group)
            GroupClear(object);
            DestroyGroup(object);
        #elseif (objectType == item)
            RemoveItem(object)
        #elseif (objectType == location)
            RemoveLocation(object)
        #elseif (objectType == rect)
            RemoveRect(object)
        #elseif (objectType == region)
            RemoveRegion(object)
        #elseif (objectType == effect)
            DestroyEffect(object)
        #endif
        Index_Flush(object)
    }
    
    // присвоить значения объекту
    #define Index_SetValue(h, val) =
    {
        SaveInteger(Index_Data,GetHandleId(h),Value2,val)
    }
    
    // возвращает присвоенное значение
    #define Index_GetValue(h) =
    {
        LoadInteger(Index_Data,GetHandleId(h),Value2)
    }
    
    // присваивание id объекту
    #define Index_Set(h, val, isStatic) =
    {
        SaveInteger(Index_Data,GetHandleId(h),Value,val)
        #if (isStatic)
            ValueIsStatic[val] = true;
            staticIndexes[staticIndexesCount] = val;
            staticIndexesCount++;
        #endif
    }
    
    // автоприсваивание id объекту
    public int Get(handle object, bool isStatic)
    {
        int hId = GetHandleId(object)
        if (!HaveSavedInteger(Index_Data,hId,Value))
        {
            if (slotCount > 0)
            {
                if (isStatic)
                {
                    Index_Set(object,buffSlots[slotCount],true);
                }
                else
                {
                    Index_Set(object,buffSlots[slotCount],false);
                }
                slotCount--;
            }
            else
            {
                count++;
                if (isStatic)
                {
                    Index_Set(object,count, true);
                }
                else
                {
                    Index_Set(object,count, false);
                }
            }
        }
        return LoadInteger(Index_Data,hId,Value);
    } 
    
    public int Get2(handle object)
    {
        return LoadInteger(Index_Data, GetHandleId(object),Value);
    }
    
    
    callback onUnitDeath()
    {
        Flush(GetDyingUnit());
    }
}
`
ОЖИДАНИЕ РЕКЛАМЫ...

Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
29
Ууууужас, GetIndex ничего не должно делать и присваивать, это просто архитектурный фейл :D
15
довольно удобная система, все продуманно, багов не нашел
еще бы нашел бы я баги
Doc:
Ууууужас, GetIndex ничего не должно делать и присваивать, это просто архитектурный фейл :D
ого пока писал коммент еще 1 появился
ну почему Док?
это хомяков это очень удобно, не надо писать все проверки и тд просо написал 1 функциюи готово. В эо и сила автоматизации офк
24
Doc:
Ууууужас, GetIndex ничего не должно делать и присваивать, это просто архитектурный фейл :D
Пруф?
29
Пруф в названии!
Get на то и гет, что вовзращает значение и ниче не делает.
Если уж делать чтобы что-то делало нужно аргумент вводить типа checkIfIndexExists а то неочевидно же.
24
Пруф в названии!
Doc, блин, ну это совсем не архитектурный фейл, это скорее небрежность в именовании. Но это связано с тем, что эта барахолка сделана для меня самого. Если бы это был код в массы, то скидывал б в барахолку:)
Get на то и гет, что вовзращает значение и ниче не делает.
Поюзай норм языки кроме жабы, поймешь что это не разу не так. намек на проперти.
Если уж делать чтобы что-то делало нужно аргумент вводить типа checkIfIndexExists а то неочевидно же.
Ты знал что вызов лишней функции, в которой, мало инструкций - не оптимален?
29
Я лучше сольюсь, лень спорить.
Тебе решать и офк я понимаю, что это не для паблика, но надо же было КАМЕНТИК НАПИСАТЬ))))
И да, я между прочим и на шарпе писаю! И на скале! И даже на си (но это давно и не правда)
Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.