source: icGREP/icgrep-devel/icgrep/pablo/pe_string.h @ 4272

Last change on this file since 4272 was 4272, checked in by nmedfort, 4 years ago

Implemented slab allocator based on the original Parabix StringPool?; intergrated it with RE and Pablo AST nodes.

File size: 976 bytes
Line 
1#ifndef PE_STRING_H
2#define PE_STRING_H
3
4#include <pablo/pabloAST.h>
5#include <string>
6
7namespace pablo {
8
9class String : public PabloAST {
10    friend String * makeString(const std::string value) noexcept;
11public:
12    static inline bool classof(const PabloAST * e) {
13        return e->getClassTypeId() == ClassTypeId::String;
14    }
15    static inline bool classof(const void *) {
16        return false;
17    }
18    virtual ~String(){
19
20    }
21    inline const std::string & str() const {
22        return mValue;
23    }
24    inline std::string str() {
25        return mValue;
26    }
27protected:
28    void* operator new (std::size_t size) noexcept {
29        return mAllocator.allocate(size);
30    }
31    String(const std::string && value) noexcept
32    : PabloAST(ClassTypeId::String)
33    , mValue(value)
34    {
35
36    }
37private:
38    const std::string mValue;
39};
40
41inline String * makeString(const std::string value) noexcept {
42    return new String(std::move(value));
43}
44
45
46}
47
48#endif // PE_STRING_H
Note: See TracBrowser for help on using the repository browser.