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

Last change on this file since 4543 was 4512, checked in by nmedfort, 5 years ago

Fix for printing out Name strings

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