diff options
Diffstat (limited to 'include/llvm/Bitcode/Serialize.h')
-rw-r--r-- | include/llvm/Bitcode/Serialize.h | 18 |
1 files changed, 16 insertions, 2 deletions
diff --git a/include/llvm/Bitcode/Serialize.h b/include/llvm/Bitcode/Serialize.h index 061ccaf7c3..dc1fe646f2 100644 --- a/include/llvm/Bitcode/Serialize.h +++ b/include/llvm/Bitcode/Serialize.h @@ -18,6 +18,7 @@ #include "llvm/Bitcode/Serialization.h" #include "llvm/Bitcode/BitstreamWriter.h" #include "llvm/ADT/SmallVector.h" +#include "llvm/ADT/DenseMap.h" namespace llvm { @@ -25,6 +26,10 @@ class Serializer { BitstreamWriter& Stream; SmallVector<uint64_t,10> Record; bool inBlock; + + typedef DenseMap<void*,unsigned> MapTy; + MapTy PtrMap; + public: Serializer(BitstreamWriter& stream, unsigned BlockID = 0); ~Serializer(); @@ -35,13 +40,22 @@ public: void EmitInt(unsigned X); void EmitBool(bool X) { EmitInt(X); } void EmitCStr(const char* beg, const char* end); - void EmitCStr(const char* cstr); + void EmitCStr(const char* cstr); + + void EmitPtr(void* ptr) { EmitInt(getPtrId(ptr)); } + + template <typename T> + void EmitOwnedPtr(T* ptr) { + EmitPtr(ptr); + SerializeTrait<T>::Emit(*this,*ptr); + } void Flush() { if (inRecord()) EmitRecord(); } private: void EmitRecord(); - inline bool inRecord() { return Record.size() > 0; } + inline bool inRecord() { return Record.size() > 0; } + unsigned getPtrId(void* ptr); }; } // end namespace llvm |