From: Ted Kremenek Date: Wed, 7 Nov 2007 23:18:40 +0000 (+0000) Subject: Added version of BatchEmitOwnedPtrs and BatchReadOwnedPtrs that emits/reads X-Git-Url: http://plrg.eecs.uci.edu/git/?p=oota-llvm.git;a=commitdiff_plain;h=fba9cdaa81e9e08ad4194acbff102586cf0838c5 Added version of BatchEmitOwnedPtrs and BatchReadOwnedPtrs that emits/reads an array of pointers of the same type. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@43852 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/include/llvm/Bitcode/Deserialize.h b/include/llvm/Bitcode/Deserialize.h index e77c6c9fa7f..5f8e1375593 100644 --- a/include/llvm/Bitcode/Deserialize.h +++ b/include/llvm/Bitcode/Deserialize.h @@ -166,6 +166,18 @@ public: P3 = (ID3) ? SerializeTrait::Materialize(*this) : NULL; if (ID3 && A3) RegisterPtr(ID3,P3); } + + template + void BatchReadOwnedPtrs(unsigned NumPtrs, T** Ptrs) { + llvm::SmallVector PtrIDs; + PtrIDs.reserve(NumPtrs); + + for (unsigned i = 0; i < NumPtrs; ++i) + PtrIDs.push_back(ReadInt()); + + for (unsigned i = 0; i < NumPtrs; ++i) + Ptrs[i] = PtrIDs[i] ? SerializeTrait::Materialize(*this) : NULL; + } template diff --git a/include/llvm/Bitcode/Serialize.h b/include/llvm/Bitcode/Serialize.h index b92d49a7ea0..24e9f60951f 100644 --- a/include/llvm/Bitcode/Serialize.h +++ b/include/llvm/Bitcode/Serialize.h @@ -85,6 +85,15 @@ public: if (p4) SerializeTrait::Emit(*this,*p4); } + template + void BatchEmitOwnedPtrs(unsigned NumPtrs, T** Ptrs) { + for (unsigned i = 0; i < NumPtrs; ++i) + EmitPtr(Ptrs[i]); + + for (unsigned i = 0; i < NumPtrs; ++i) + if (Ptrs[i]) SerializeTrait::Emit(*this,Ptrs[i]); + } + void FlushRecord() { if (inRecord()) EmitRecord(); } void EnterBlock(unsigned BlockID = 8, unsigned CodeLen = 3);