Add support to write and read a fixed amount of raw data
authorChris Lattner <sabre@nondot.org>
Sun, 15 Jul 2001 00:16:22 +0000 (00:16 +0000)
committerChris Lattner <sabre@nondot.org>
Sun, 15 Jul 2001 00:16:22 +0000 (00:16 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@186 91177308-0d34-0410-b5e6-96231b3b80d8

include/llvm/Bytecode/Primitives.h

index f4b232b3687fac6eaa6e2139411a0cc5e4c806e6..e5f93e718cfc3554c1d8ab59d00e60e69d28e2e6 100644 (file)
@@ -130,6 +130,24 @@ static inline bool read(const unsigned char *&Buf, const unsigned char *EndBuf,
   return false;
 }
 
+static inline bool input_data(const unsigned char *&Buf,
+                             const unsigned char *EndBuf, 
+                             void *Ptr, void *End, bool Align = false) {
+  unsigned char *Start = (unsigned char *)Ptr;
+  unsigned Amount = (unsigned char *)End - Start;
+  if (Buf+Amount > EndBuf) return true;
+#ifdef LITTLE_ENDIAN
+  copy(Buf, Buf+Amount, Start);
+  Buf += Amount;
+#else
+  unsigned char *E = (unsigned char *)End;
+  while (Ptr != E)
+    *--E = *Buf++;
+#endif
+
+  if (Align) return align32(Buf, EndBuf);
+  return false;
+}
 
 //===----------------------------------------------------------------------===//
 //                             Writing Primitives
@@ -234,4 +252,17 @@ static inline void output(const string &s, vector<unsigned char> &Out,
     align32(Out);                   // Make sure we are now aligned...
 }
 
+static inline void output_data(void *Ptr, void *End,
+                              vector<unsigned char> &Out, bool Align = false) {
+#ifdef LITTLE_ENDIAN
+  Out.insert(Out.end(), (unsigned char*)Ptr, (unsigned char*)End);
+#else
+  unsigned char *E = (unsigned char *)End;
+  while (Ptr != E)
+    Out.push_back(*--E);
+#endif
+
+  if (Align) align32(Out);
+}
+
 #endif