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

Last change on this file since 4388 was 4280, checked in by nmedfort, 5 years ago

More Pablo IR manipulation functionality; finished use analysis optimizer (requires boost). Removed remaining LLVM optimization passes.

File size: 1.2 KB
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    virtual PabloAST * getOperand(const unsigned) const {
22        assert (false);
23        return nullptr;
24    }
25    virtual unsigned getNumOperands() const {
26        return 0;
27    }
28    virtual void setOperand(const unsigned, PabloAST *) {
29        assert (false);
30    }
31    inline const std::string & str() const {
32        return mValue;
33    }
34    inline std::string str() {
35        return mValue;
36    }
37protected:
38    void* operator new (std::size_t size) noexcept {
39        return mAllocator.allocate(size);
40    }
41    String(const std::string && value) noexcept
42    : PabloAST(ClassTypeId::String)
43    , mValue(value)
44    {
45
46    }
47private:
48    const std::string mValue;
49};
50
51inline String * makeString(const std::string value) noexcept {
52    return new String(std::move(value));
53}
54
55
56}
57
58#endif // PE_STRING_H
Note: See TracBrowser for help on using the repository browser.