00001 /** @file rutz/value.h abstract interface for string-convertible types */ 00002 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: Tue Sep 28 11:19:17 1999 00010 // commit: $Id: value.h 8249 2007-04-12 06:03:40Z rjpeters $ 00011 // $HeadURL: svn://isvn.usc.edu/software/invt/trunk/saliency/src/rutz/value.h $ 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 // 00032 /////////////////////////////////////////////////////////////////////// 00033 00034 #ifndef GROOVX_RUTZ_VALUE_H_UTC20050626084020_DEFINED 00035 #define GROOVX_RUTZ_VALUE_H_UTC20050626084020_DEFINED 00036 00037 #include <iosfwd> 00038 00039 namespace rutz 00040 { 00041 class fstring; 00042 class value; 00043 } 00044 00045 /////////////////////////////////////////////////////////////////////// 00046 /** 00047 * 00048 * \c rutz::value defines an interface for variant-type value objects 00049 * that can be converted to+from a string representation. Subclasses 00050 * may allow conversion among types so that a value of any basic type 00051 * can be retrieved, or they may allow only one basic type to be 00052 * retrieved. 00053 * 00054 **/ 00055 /////////////////////////////////////////////////////////////////////// 00056 00057 class rutz::value 00058 { 00059 public: 00060 00061 /// Default constructor. 00062 value(); 00063 00064 /// Virtual destructor ensures proper destruction of base classes. 00065 virtual ~value(); 00066 00067 /// Return a string giving the name of the native type. 00068 virtual rutz::fstring value_typename() const = 0; 00069 00070 /// Write the value to a \c std::ostream. 00071 virtual void print_to(std::ostream& os) const = 0; 00072 00073 /// Read the value from a \c std::istream. 00074 virtual void scan_from(std::istream& is) = 0; 00075 00076 /// Get an \c rutz::fstring representation of the value. 00077 /** Builds a string stream, calls print_to(), and returns its 00078 value. */ 00079 rutz::fstring get_string() const; 00080 00081 /// Set the value from an rutz::fstring. 00082 /** Builds a string stream from \a val and calling scan_from() with 00083 it. */ 00084 void set_string(rutz::fstring val); 00085 }; 00086 00087 /////////////////////////////////////////////////////////////////////// 00088 // 00089 // Global stream insertion/extraction operators for rutz::value 00090 // 00091 /////////////////////////////////////////////////////////////////////// 00092 00093 inline std::ostream& operator<<(std::ostream& os, 00094 const rutz::value& val) 00095 { 00096 val.print_to(os); 00097 return os; 00098 } 00099 00100 inline std::istream& operator>>(std::istream& is, 00101 rutz::value& val) 00102 { 00103 val.scan_from(is); 00104 return is; 00105 } 00106 00107 static const char __attribute__((used)) vcid_groovx_rutz_value_h_utc20050626084020[] = "$Id: value.h 8249 2007-04-12 06:03:40Z rjpeters $ $HeadURL: svn://isvn.usc.edu/software/invt/trunk/saliency/src/rutz/value.h $"; 00108 #endif // !GROOVX_RUTZ_VALUE_H_UTC20050626084020_DEFINED