00001
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00033
00034 #ifndef GROOVX_IO_READER_CC_UTC20050626084021_DEFINED
00035 #define GROOVX_IO_READER_CC_UTC20050626084021_DEFINED
00036
00037 #include "io/reader.h"
00038
00039 #include "rutz/base64.h"
00040 #include "rutz/bytearray.h"
00041 #include "rutz/error.h"
00042 #include "rutz/sfmt.h"
00043
00044 #include "rutz/trace.h"
00045 #include "rutz/debug.h"
00046 GVX_DBG_REGISTER
00047
00048 namespace io
00049 {
00050 class read_version_error : public rutz::error
00051 {
00052 public:
00054 read_version_error(const char* classname,
00055 io::version_id attempted_id,
00056 io::version_id lowest_supported_id,
00057 const char* msg,
00058 const rutz::file_pos& pos);
00059
00060 virtual ~read_version_error() throw();
00061 };
00062 }
00063
00064 io::read_version_error::read_version_error(const char* classname,
00065 io::version_id attempted_id,
00066 io::version_id lowest_supported_id,
00067 const char* info,
00068 const rutz::file_pos& pos) :
00069 rutz::error(pos)
00070 {
00071 const rutz::fstring m =
00072 rutz::sfmt("io::read_version_error: in %s, serial version %ld "
00073 "is not supported. The lowest supported version "
00074 "is %ld. %s",
00075 classname, attempted_id, lowest_supported_id, info);
00076 this->set_msg(m);
00077 }
00078
00079 io::read_version_error::~read_version_error() throw() {}
00080
00081 io::reader::~reader() throw() {}
00082
00083 int io::reader::ensure_version_id(const char* name,
00084 io::version_id lowest_supported_version,
00085 const char* msg,
00086 const rutz::file_pos& pos)
00087 {
00088 GVX_TRACE("io::reader::ensure_version_id");
00089
00090 io::version_id actual_version = this->input_version_id();
00091
00092 if (actual_version < lowest_supported_version)
00093 throw io::read_version_error(name, actual_version,
00094 lowest_supported_version, msg,
00095 pos);
00096
00097 GVX_ASSERT(actual_version >= lowest_supported_version);
00098
00099 return actual_version;
00100 }
00101
00102 void io::reader::default_read_byte_array(const rutz::fstring& name,
00103 rutz::byte_array& data)
00104 {
00105 GVX_TRACE("io::reader::default_read_byte_array");
00106
00107 rutz::fstring encoded = read_string_impl(name);
00108 rutz::base64_decode(encoded.c_str(), encoded.length(),
00109 data);
00110 }
00111
00112 static const char __attribute__((used)) vcid_groovx_io_reader_cc_utc20050626084021[] = "$Id: reader.cc 10065 2007-04-12 05:54:56Z rjpeters $ $HeadURL: file:
00113 #endif // !GROOVX_IO_READER_CC_UTC20050626084021_DEFINED