[llvm] r205032 - Support: Functions for writing endian specific data to streams.

Justin Bogner mail at justinbogner.com
Fri Mar 28 12:14:43 PDT 2014


Author: bogner
Date: Fri Mar 28 14:14:43 2014
New Revision: 205032

URL: http://llvm.org/viewvc/llvm-project?rev=205032&view=rev
Log:
Support: Functions for writing endian specific data to streams.

This adds a new header, EndianStream.h, which supplies an adaptor for
writing endian specific data to a raw_ostream.

Added:
    llvm/trunk/include/llvm/Support/EndianStream.h

Added: llvm/trunk/include/llvm/Support/EndianStream.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Support/EndianStream.h?rev=205032&view=auto
==============================================================================
--- llvm/trunk/include/llvm/Support/EndianStream.h (added)
+++ llvm/trunk/include/llvm/Support/EndianStream.h Fri Mar 28 14:14:43 2014
@@ -0,0 +1,39 @@
+//===- EndianStream.h - Stream ops with endian specific data ----*- C++ -*-===//
+//
+//                     The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+//
+// This file defines utilities for operating on streams that have endian
+// specific data.
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef _LLVM_SUPPORT_ENDIAN_STREAM_H_
+#define _LLVM_SUPPORT_ENDIAN_STREAM_H_
+
+#include <llvm/Support/Endian.h>
+#include <llvm/Support/raw_ostream.h>
+
+namespace llvm {
+namespace support {
+
+namespace endian {
+/// Adapter to write values to a stream in a particular byte order.
+template <endianness endian> struct Writer {
+  raw_ostream &OS;
+  Writer(raw_ostream &OS) : OS(OS) {}
+  template <typename value_type> void write(value_type Val) {
+    Val = byte_swap<value_type, endian>(Val);
+    OS.write((const char *)&Val, sizeof(value_type));
+  }
+};
+} // end namespace endian
+
+} // end namespace support
+} // end namespace llvm
+
+#endif // _LLVM_SUPPORT_ENDIAN_STREAM_H_





More information about the llvm-commits mailing list