00001 #ifndef TYPELIB_VALUE_OPS_DETAILS_HH 00002 #define TYPELIB_VALUE_OPS_DETAILS_HH 00003 00004 #include <typelib/memory_layout.hh> 00005 #include <typelib/value.hh> 00006 #include <iosfwd> 00007 00008 #include <boost/tuple/tuple.hpp> 00009 00010 namespace Typelib 00011 { 00015 namespace ValueOps 00016 { 00017 struct OutputStream 00018 { 00019 virtual void write(uint8_t const* data, size_t size) = 0; 00020 }; 00021 boost::tuple<size_t, MemoryLayout::const_iterator> 00022 dump(uint8_t const* data, size_t in_offset, 00023 OutputStream& stream, MemoryLayout::const_iterator const begin, MemoryLayout::const_iterator const end); 00024 00025 struct InputStream 00026 { 00027 virtual void read(uint8_t* data, size_t size) = 0; 00028 }; 00029 boost::tuple<size_t, MemoryLayout::const_iterator> 00030 load(uint8_t* data, size_t out_offset, 00031 InputStream& stream, 00032 MemoryLayout::const_iterator const begin, MemoryLayout::const_iterator const end); 00033 00034 boost::tuple<bool, uint8_t*, uint8_t*, MemoryLayout::const_iterator> 00035 compare(uint8_t* out_buffer, uint8_t* in_buffer, 00036 MemoryLayout::const_iterator it, 00037 MemoryLayout::const_iterator end); 00038 boost::tuple<uint8_t*, uint8_t*, MemoryLayout::const_iterator> 00039 copy(uint8_t* out_buffer, uint8_t* in_buffer, 00040 MemoryLayout::const_iterator it, 00041 MemoryLayout::const_iterator end); 00042 boost::tuple<uint8_t*, MemoryLayout::const_iterator> 00043 destroy(uint8_t* buffer, 00044 MemoryLayout::const_iterator it, 00045 MemoryLayout::const_iterator end); 00046 boost::tuple<uint8_t*, MemoryLayout::const_iterator> 00047 init(uint8_t* buffer, 00048 MemoryLayout::const_iterator it, 00049 MemoryLayout::const_iterator end); 00050 boost::tuple<uint8_t*, MemoryLayout::const_iterator> 00051 zero(uint8_t* buffer, 00052 MemoryLayout::const_iterator it, 00053 MemoryLayout::const_iterator end); 00054 boost::tuple<size_t, MemoryLayout::const_iterator> 00055 getDumpSize(uint8_t* buffer, 00056 MemoryLayout::const_iterator it, 00057 MemoryLayout::const_iterator end); 00058 } 00059 } 00060 00061 #endif 00062