summaryrefslogtreecommitdiff
path: root/libs/cpp/include/vector
blob: 2075b140b41e5b5eec0d140022b28ac52b5cf8da (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
#pragma once

#include <string.h>

namespace std {
    template <class T> class vector {
    public:
        T *mElements;
        int mSize;
        int mCapacity;

        ~vector() {
            if (mElements != NULL) {
                decrease_size(mSize);
                delete mElements;
            }
        }

        int push_back(T &value) {
            get_new_capacity(1);
            append_back(1, &value);
        }

        T *erase(T *first, T *last) {
            if (first != last) {
                int bytesToMove = (int) mElements + mSize * sizeof(T) - (int) last;
                memmove(first, last, bytesToMove);
                mSize -= (int) last - (int) first;
            }
            return first;
        }

    private:
        void decrease_size(int amount);

        int get_new_capacity(int growth);

        void append_back(int length, T *items);
    };
} // namespace std