00001 00003 00004 // 00005 // Copyright (c) 2000-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: Thu Nov 16 00:10:45 2000 00010 // commit: $Id: gbvec.h 10065 2007-04-12 05:54:56Z rjpeters $ 00011 // $HeadURL: file:///lab/rjpeters/svnrepo/code/trunk/groovx/src/gfx/gbvec.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 // 00033 00034 #ifndef GROOVX_GFX_GBVEC_H_UTC20050626084023_DEFINED 00035 #define GROOVX_GFX_GBVEC_H_UTC20050626084023_DEFINED 00036 00037 #include "rutz/multivalue.h" 00038 00039 #include "geom/vec2.h" 00040 #include "geom/vec3.h" 00041 00043 template <class T> 00044 class GbVec2 : public geom::vec2<T>, 00045 public rutz::multi_value<T> 00046 { 00047 public: 00049 GbVec2(T x_=T(), T y_=T()); 00050 00052 GbVec2(const rutz::fstring& s) 00053 : rutz::multi_value<T>(2) 00054 { rutz::multi_value<T>::set_string(s); } 00055 00057 virtual ~GbVec2(); 00058 00060 geom::vec2<T>& vec() { return *this; } 00062 const geom::vec2<T>& vec() const { return *this; } 00063 00064 virtual rutz::fstring value_typename() const; 00065 00066 virtual const T* const_begin() const; 00067 }; 00068 00070 template <class T> 00071 class GbVec3 : public geom::vec3<T>, 00072 public rutz::multi_value<T> 00073 { 00074 public: 00076 GbVec3(T x_=T(), T y_=T(), T z_=T()); 00077 00079 GbVec3(const rutz::fstring& s) 00080 : rutz::multi_value<T>(3) 00081 { rutz::multi_value<T>::set_string(s); } 00082 00084 virtual ~GbVec3(); 00085 00087 geom::vec3<T>& vec() { return *this; } 00089 const geom::vec3<T>& vec() const { return *this; } 00090 00091 virtual rutz::fstring value_typename() const; 00092 00093 virtual const T* const_begin() const; 00094 }; 00095 00096 static const char __attribute__((used)) vcid_groovx_gfx_gbvec_h_utc20050626084023[] = "$Id: gbvec.h 10065 2007-04-12 05:54:56Z rjpeters $ $HeadURL: file: 00097 #endif // !GROOVX_GFX_GBVEC_H_UTC20050626084023_DEFINED