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

Last change on this file since 4596 was 4567, checked in by cameron, 4 years ago

Use llvm:raw_ostream in Pablo printer

File size: 2.2 KB
RevLine 
[4213]1#ifndef PE_STRING_H
2#define PE_STRING_H
3
[4244]4#include <pablo/pabloAST.h>
[4510]5#include <llvm/ADT/StringRef.h>
6#include <llvm/ADT/Twine.h>
7#include <llvm/ADT/SmallVector.h>
[4213]8#include <string>
[4510]9#include <ostream>
[4567]10#include <llvm/Support/raw_os_ostream.h>
[4213]11
12namespace pablo {
13
[4257]14class String : public PabloAST {
[4416]15    friend class SymbolGenerator;
[4510]16    friend std::ostream & operator<< (std::ostream& stream, const String & string);
[4213]17public:
[4510]18    using StringAllocator = SlabAllocator<char>;
19    using Value = StringRef;
20
[4244]21    static inline bool classof(const PabloAST * e) {
[4213]22        return e->getClassTypeId() == ClassTypeId::String;
23    }
24    static inline bool classof(const void *) {
25        return false;
26    }
27    virtual ~String(){
28
29    }
[4510]30    inline const StringRef & value() const {
[4213]31        return mValue;
32    }
[4510]33    inline std::string to_string() const {
34        return mValue.str();
35    }
36    inline StringRef value() {
[4257]37        return mValue;
38    }
[4433]39    inline bool isGenerated() const {
40        return mGenerated;
41    }
42    inline bool isUserDefined() const {
43        return !mGenerated;
44    }
[4213]45protected:
[4510]46    String(const std::string & value, const bool generated) noexcept
[4244]47    : PabloAST(ClassTypeId::String)
[4510]48    , mValue(duplicate(value))
[4433]49    , mGenerated(generated)
[4213]50    {
51
52    }
[4510]53    inline const char * duplicate(const std::string & value) {
54        char * string = reinterpret_cast<char*>(mAllocator.allocate(value.length() + 1));
55        std::memcpy(string, value.c_str(), value.length());
56        string[value.length()] = '\0';
57        return string;
58    }
[4213]59private:
[4510]60    const StringRef         mValue;
61    const bool              mGenerated;
[4213]62};
63
[4510]64inline std::ostream & operator <<(std::ostream & stream, const String & string) {
65    stream << string.value().data();
66    return stream;
[4213]67}
68
[4512]69inline std::ostream & operator <<(std::ostream & stream, const String * string) {
70    stream << string->value().data();
71    return stream;
[4510]72}
73
[4567]74inline llvm::raw_ostream & operator <<(llvm::raw_ostream & stream, const String & string) {
75    stream << string.value().data();
76    return stream;
[4512]77}
78
[4567]79inline llvm::raw_ostream & operator <<(llvm::raw_ostream & stream, const String * string) {
80    stream << string->value().data();
81    return stream;
82}
83
84}
85
[4213]86#endif // PE_STRING_H
Note: See TracBrowser for help on using the repository browser.