aboutsummaryrefslogtreecommitdiff
path: root/src/libjin/Common/Array.hpp
blob: 7c0f058217cf31f93094c5a4b85d9304a8e1e354 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
#ifndef __LIBJIN_COMMON_ARRAY_H
#define __LIBJIN_COMMON_ARRAY_H

namespace jin
{
    
    /* ԶͷŶڴջϴĶ̬ */
    template<typename T>
    class Array
    {
    public:
        Array() : length(0), data(nullptr) {}

        Array(int l)
        {
            length = l;
            data = new T[l];
        }

        ~Array()
        {
            delete[] data;
            length = 0;
        }

        T* operator &()
        {
            return data;
        }

        T operator[](int index)
        {
            return data[index];
        }

        /* ڴ */
        void bind(T* d, int len)
        {
            if (data != nullptr)
                delete data; 
            data = d; 
            length = len;
        }

        void add(T v)
        {
            int len = length + 1;
            T* d = new T[len];
            memcpy(d, data, size());
            d[length] = v;
            bind(d, len);
        }
 
        int size()
        {
            return sizeof(T) * length;
        }

        int count()
        {
            return length;
        }

    private:
        /**
        * http://blog.jobbole.com/106923/
        * new ڴ洴
        * 1.  new ڴ
        * 2. ù캯
        *
        * new, deleteڷͷڴ棬
        */
        void* operator new(size_t t);
        void operator delete(void* ptr);

        T * data;
        unsigned int length;

    };

}

#endif