reader.cc

Go to the documentation of this file.
00001 
00003 
00004 //
00005 // Copyright (c) 1999-2004 California Institute of Technology
00006 // Copyright (c) 2004-2007 University of Southern California
00007 // Rob Peters <rjpeters at usc dot edu>
00008 //
00009 // created: Mon Jun  7 12:47:00 1999
00010 // commit: $Id: reader.cc 10065 2007-04-12 05:54:56Z rjpeters $
00011 // $HeadURL: file:///lab/rjpeters/svnrepo/code/trunk/groovx/src/io/reader.cc $
00012 //
00013 // --------------------------------------------------------------------
00014 //
00015 // This file is part of GroovX.
00016 //   [http://ilab.usc.edu/rjpeters/groovx/]
00017 //
00018 // GroovX is free software; you can redistribute it and/or modify it
00019 // under the terms of the GNU General Public License as published by
00020 // the Free Software Foundation; either version 2 of the License, or
00021 // (at your option) any later version.
00022 //
00023 // GroovX is distributed in the hope that it will be useful, but
00024 // WITHOUT ANY WARRANTY; without even the implied warranty of
00025 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
00026 // General Public License for more details.
00027 //
00028 // You should have received a copy of the GNU General Public License
00029 // along with GroovX; if not, write to the Free Software Foundation,
00030 // Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
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

The software described here is Copyright (c) 1998-2005, Rob Peters.
This page was generated Wed Dec 3 06:49:39 2008 by Doxygen version 1.5.5.