From 211f674e3fd27c663bed820f5569518de4b1d187 Mon Sep 17 00:00:00 2001 From: Ted Kremenek Date: Tue, 23 Oct 2007 22:17:03 +0000 Subject: [PATCH] Added "ReadEnum" and "WriteEnum" to serialization classes. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@43265 91177308-0d34-0410-b5e6-96231b3b80d8 --- include/llvm/Bitcode/Serialization.h | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/include/llvm/Bitcode/Serialization.h b/include/llvm/Bitcode/Serialization.h index 2d633115a2a..356a75c104b 100644 --- a/include/llvm/Bitcode/Serialization.h +++ b/include/llvm/Bitcode/Serialization.h @@ -35,7 +35,12 @@ public: template inline void Emit(const T& X) { SerializeTrait::Serialize(*this,X); } - void EmitInt(unsigned X, unsigned bits); + void EmitInt(unsigned X, unsigned bits); + + // FIXME: Substitute a better implementation which calculates the minimum + // number of bits needed to serialize the enum. + void EmitEnum(unsigned X, unsigned MinVal, unsigned MaxVal) { EmitInt(X,32); } + void EmitCString(const char* cstr); void Flush() { if (inRecord()) EmitRecord(); } @@ -55,7 +60,7 @@ public: ~Deserializer(); template - inline void Read(T& X) { SerializeTrait::Deserialize(*this,X); } + inline T& Read(T& X) { SerializeTrait::Deserialize(*this,X); return X; } template inline T* Materialize() { @@ -67,6 +72,13 @@ public: uint64_t ReadInt(unsigned bits = 32); bool ReadBool() { return ReadInt(1); } + // FIXME: Substitute a better implementation which calculates the minimum + // number of bits needed to serialize the enum. + template + EnumT ReadEnum(unsigned MinVal, unsigned MaxVal) { + return static_cast(ReadInt(32)); + } + char* ReadCString(char* cstr = NULL, unsigned MaxLen=0, bool isNullTerm=true); void ReadCString(std::vector& buff, bool isNullTerm=false); @@ -97,7 +109,6 @@ struct SerializeIntTrait { X = (uintty) S.ReadInt(Bits); } }; - template <> struct SerializeTrait : public SerializeIntTrait {}; @@ -111,5 +122,7 @@ template <> struct SerializeTrait template <> struct SerializeTrait : public SerializeIntTrait {}; + + } // end namespace llvm #endif -- 2.11.0