source: icGREP/icgrep-devel/icgrep/pablo/pablo_type.h @ 5160

Last change on this file since 5160 was 5160, checked in by nmedfort, 3 years ago

Initial work for incorporating Types into Pablo AST.

File size: 1.3 KB
Line 
1#ifndef TYPE_H
2#define TYPE_H
3
4#include <util/slab_allocator.h>
5#include <vector>
6
7namespace pablo {
8
9class PabloType {
10public:
11
12    enum TypeId {
13        Scalar = 0
14        , Stream = 1
15        , String = 2
16    };
17
18    using Allocator = SlabAllocator<PabloType *>;
19
20    using Allocated = std::vector<PabloType *, Allocator>;
21
22    friend const PabloType * getPabloType(const PabloType::TypeId typeId, const unsigned fieldWidth);
23
24    bool operator==(const PabloType & t) const;
25
26    PabloType & operator=(PabloType & t) = delete;
27
28    void* operator new (std::size_t size) noexcept {
29        return mAllocator.allocate(size);
30    }
31
32    TypeId getTypeId() const {
33        return mTypeId;
34    }
35
36    unsigned getFieldWidth() const {
37        return mFieldWidth;
38    }
39
40    void operator delete (void * ptr) {
41        mAllocator.deallocate(static_cast<Allocator::value_type *>(ptr));
42    }
43
44
45protected:
46
47    inline PabloType(const TypeId typeId, const unsigned fieldWidth)
48    : mTypeId(typeId)
49    , mFieldWidth(fieldWidth)
50    {
51
52    }
53
54    inline ~PabloType() {
55
56    }
57
58private:
59
60    const TypeId                        mTypeId;
61    const unsigned                      mFieldWidth;
62
63    static Allocator                    mAllocator;
64
65};
66
67const PabloType * getPabloType(const PabloType::TypeId typeId, const unsigned fieldWidth = 1);
68
69}
70
71#endif // TYPE_H
Note: See TracBrowser for help on using the repository browser.