writer.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:49:50 1999
00010 // commit: $Id: writer.cc 10065 2007-04-12 05:54:56Z rjpeters $
00011 // $HeadURL: file:///lab/rjpeters/svnrepo/code/trunk/groovx/src/io/writer.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_WRITER_CC_UTC20050626084021_DEFINED
00035 #define GROOVX_IO_WRITER_CC_UTC20050626084021_DEFINED
00036 
00037 #include "io/writer.h"
00038 
00039 #include "rutz/base64.h"
00040 #include "rutz/bytearray.h" // for use with rutz::base64_encode()
00041 #include "rutz/error.h"
00042 #include "rutz/fstring.h"
00043 #include "rutz/sfmt.h"
00044 
00045 #include "rutz/trace.h"
00046 #include "rutz/debug.h"
00047 GVX_DBG_REGISTER
00048 
00049 namespace io
00050 {
00051   class write_version_error : public rutz::error
00052   {
00053   public:
00055     write_version_error(const char* classname,
00056                       io::version_id attempted_id,
00057                       io::version_id lowest_supported_id,
00058                       const char* msg,
00059                       const rutz::file_pos& pos);
00060 
00061     virtual ~write_version_error() throw();
00062   };
00063 }
00064 
00065 io::write_version_error::write_version_error(const char* classname,
00066                                          io::version_id attempted_id,
00067                                          io::version_id lowest_supported_id,
00068                                          const char* info,
00069                                          const rutz::file_pos& pos) :
00070   rutz::error(pos)
00071 {
00072   const rutz::fstring m =
00073     rutz::sfmt("io::write_version_error: in %s, serial version %ld "
00074                "is not supported. The lowest supported version "
00075                "is %ld. %s",
00076                classname, attempted_id, lowest_supported_id, info);
00077   this->set_msg(m);
00078 }
00079 
00080 io::write_version_error::~write_version_error() throw() {}
00081 
00082 io::writer::~writer () throw() {}
00083 
00084 int io::writer::ensure_output_version_id(const char* name,
00085                                      io::version_id actual_version,
00086                                      io::version_id lowest_supported_version,
00087                                      const char* msg,
00088                                      const rutz::file_pos& pos)
00089 {
00090   if (actual_version < lowest_supported_version)
00091     throw io::write_version_error(name, actual_version,
00092                                 lowest_supported_version, msg, pos);
00093 
00094   GVX_ASSERT(actual_version >= lowest_supported_version);
00095 
00096   return actual_version;
00097 }
00098 
00099 void io::writer::default_write_byte_array(const char* name,
00100                                           const unsigned char* data,
00101                                           unsigned int length)
00102 {
00103 GVX_TRACE("io::writer::default_write_byte_array");
00104 
00105   rutz::byte_array encoded;
00106 
00107   rutz::base64_encode(data, length, encoded, 60);
00108 
00109   encoded.vec.push_back('\0');
00110 
00111   write_cstring(name, reinterpret_cast<char*>(&encoded.vec[0]));
00112 }
00113 
00114 static const char __attribute__((used)) vcid_groovx_io_writer_cc_utc20050626084021[] = "$Id: writer.cc 10065 2007-04-12 05:54:56Z rjpeters $ $HeadURL: file:
00115 #endif // !GROOVX_IO_WRITER_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.