C style vector

Durum
Üzgünüz bu konu cevaplar için kapatılmıştır...
#Ri
Coder
Katılım
17 Ocak 2016
Mesajlar
1,111
Çözümler
2
Tepki puanı
2,542
Ödüller
12
Yaş
9
10 HİZMET YILI
C:
template<class T>
class Vector
{
public:
    void InitVec(int _max = 255)
    {
        maxcount = _max;
        count = 0;
        items = (T**)malloc(sizeof(T*) * maxcount);
        for (auto i = 0; i < 255; i++)
            items[i] = 0;
    }

    void AddItem(T* item)
    {
        if (count >= maxcount)
            return;
        for (auto i = 0; i < maxcount; i++)
            if (items[i] == 0)
            {
                items[i] = item;
                count++;
                break;
            }
    }

    void UnlinkItem(T* item)
    {
        for (auto i = 0; i < count; i++)
            if (items[i] == item)
            {
                items[i] = 0;
                count--;
            }
    }

    T* Get(int index)
    {
        if (index <= count && items[index] != 0)
            return items[index];
        return 0;
    }

    T* Get()
    {
        for (auto i = 0; i < maxcount; i++)
            if (items[i] != 0)
                return items[i];
        return 0;
    }

    T* GetAndUnlink()
    {
        for (auto i = 0; i < count; i++)
            if (items[i] != 0)
            {
                T* it = items[i];
                items[i] = 0;
                count--;
                return it;
            }
        return 0;
    }

    int Size()
    {
        return count;
    }

    void Clear()
    {
        for (auto i = 0; i < count; i++)
            if (items[i] != 0)
            {
                free(items[i]);
                items[i] = 0;
            }
        count = 0;
    }

private:
    T** items = NULL;
    int count = 0, maxcount = 0;
};

Usage

C:
struct my_struct
{
    bool a;
    int b;
};

Vector<my_struct> my_vec;

void sync_main_thread()
{   
    my_vec.InitVec(100);
    auto i = 0;
    for(;;)
    {
        if(i >= 100)
            i=0;
        my_struct* pStruct = (my_struct*)malloc(sizeof(my_struct));
        pStruct->a = false;
        pStruct->b = i;
        my_vec.AddItem(pStruct);
        i++;
    }
}

void sync_proc()
{
    for (auto it = my_vec.GetAndUnlink(); (it); it = my_vec.GetAndUnlink())
    {
        if(it->a)
            it->b++;
        
        free(it);
    }
}

void normal()
{   
    my_vec.InitVec(10);
    
    my_struct* pStruct = (my_struct*)malloc(sizeof(my_struct));
    pStruct->a = false;
    pStruct->b = i;
    
    my_vec.AddItem(pStruct);
}

void normal_usage()
{
    if(!my_vec.Get(0)->a)
        return;
    //...
}
 
♥ ᴡʜɪsᴋᴇʀs ♥
Onaylı Üye
Katılım
11 Ocak 2018
Mesajlar
109
Tepki puanı
5
Ödüller
4
8 HİZMET YILI
Teşekkürler Dostum +
 
Durum
Üzgünüz bu konu cevaplar için kapatılmıştır...
Üst