Main Page | Class Hierarchy | Alphabetical List | Class List | Directories | File List | Class Members | File Members

extvar.hpp

Go to the documentation of this file.
00001 // +-------------------------------------------------------------------------+
00002 // |               I__n__t__e__L__i__b           0.6.10 development          |
00003 // | Copyright (c) Andrey Vikt. Stolyarov <crocodil_AT_croco.net> 2000-2007. |
00004 // |                                                                         |
00005 // | This is free software. The library part is available under              |
00006 // |                               GNU LESSER GENERAL PUBLIC LICENSE v.2.1.  |
00007 // | GNU LGPL v2.1 is found in docs/gnu_gpl2.txt,  or at  http://www.gnu.org |
00008 // |     Please see also docs/readme.txt and visit http://www.intelib.org    |
00009 // |                                                                         |
00010 // | !!! THERE IS NO WARRANTY OF ANY KIND, NEITHER EXPRESSED NOR IMPLIED !!! |
00011 // +-------------------------------------------------------------------------+
00012 
00013 
00014 
00015 
00035 #ifndef INTELIB_EXTVAR_HPP_SENTRY
00036 #define INTELIB_EXTVAR_HPP_SENTRY
00037 
00038 #include "../sexpress/sstring.hpp"
00039 #include "conteval.hpp"
00040 #include "lispform.hpp"
00041 
00042 
00044 
00045 class SExpressionIndirect : public SExpressionSetfAgent {
00046 public:
00048     virtual SReference Value() const = 0;
00050     virtual void Setf(const SReference &val) = 0;
00052     virtual void* Addr() const = 0;
00053 #if INTELIB_TEXT_REPRESENTATIONS == 1
00054     virtual SString TextRepresentation() const;
00055 #endif
00056 protected:
00057     ~SExpressionIndirect() {}
00058 };
00059 
00060 
00062 template <class Tt>
00063 class SExpressionIndirectTemplate : public SExpressionIndirect {
00064     Tt *var;
00065 public:
00067     SExpressionIndirectTemplate(Tt &a) : var(&a) {} 
00068 
00069     virtual SReference Value() const { return SReference(*var); }
00070     virtual void Setf(const SReference &val);
00071 protected:
00072     virtual void* Addr() const { return (void*)var; }
00073     ~SExpressionIndirectTemplate() {}
00074 };
00075 
00076 
00077 template<> inline
00078 void SExpressionIndirectTemplate<signed char>::Setf(const SReference &val)
00079 { *var = val.GetInt(); }
00080 template<> inline
00081 void SExpressionIndirectTemplate<unsigned char>::Setf(const SReference &val)
00082 { *var = val.GetInt(); }
00083 template<> inline
00084 void SExpressionIndirectTemplate<short>::Setf(const SReference &val)
00085 { *var = val.GetInt(); }
00086 template<> inline
00087 void SExpressionIndirectTemplate<unsigned short>::Setf(const SReference &val)
00088 { *var = val.GetInt(); }
00089 template<> inline
00090 void SExpressionIndirectTemplate<int>::Setf(const SReference &val)
00091 { *var = val.GetInt(); }
00092 template<> inline
00093 void SExpressionIndirectTemplate<unsigned int>::Setf(const SReference &val)
00094 { *var = val.GetInt(); }
00095 template<> inline
00096 void SExpressionIndirectTemplate<long>::Setf(const SReference &val)
00097 { *var = val.GetInt(); }
00098 template<> inline
00099 void SExpressionIndirectTemplate<unsigned long>::Setf(const SReference &val)
00100 { *var = val.GetInt(); }
00101 template<> inline
00102 void SExpressionIndirectTemplate<long long>::Setf(const SReference &val)
00103 { *var = val.GetInt(); }
00104 template<> inline void
00105 SExpressionIndirectTemplate<unsigned long long>::Setf(const SReference &val)
00106 { *var = val.GetInt(); }
00107 
00108 
00109 template<> inline
00110 void SExpressionIndirectTemplate<float>::Setf(const SReference &val)
00111 { *var = val.GetFloat(); }
00112 template<> inline
00113 void SExpressionIndirectTemplate<double>::Setf(const SReference &val)
00114 { *var = val.GetFloat(); }
00115 template<> inline
00116 void SExpressionIndirectTemplate<long double>::Setf(const SReference &val)
00117 { *var = val.GetFloat(); }
00118 
00119 template<> inline
00120 void SExpressionIndirectTemplate<SString>::Setf(const SReference &val)
00121 { *var = val.GetString(); }
00122 
00123 template<> inline
00124 void SExpressionIndirectTemplate<SReference>::Setf(const SReference &val)
00125 { *var = val; }
00126 
00127 
00128 
00129 
00131 
00138 class SExpressionIndirectAccessor : public SExpressionForm {
00139 public:
00140     virtual void Call(const SReference &formtail,
00141                       IntelibContinuation &cont) const;
00142 
00143 #if INTELIB_TEXT_REPRESENTATIONS == 1
00144     virtual SString TextRepresentation() const 
00145     { return "#<-INDIRECT-ACCESSOR->"; }
00146 #endif
00147 
00148 protected:
00149     ~SExpressionIndirectAccessor() {} 
00150 };
00151 
00152 
00153 #endif

Generated on Tue Dec 18 00:39:43 2007 for InteLib by  doxygen 1.4.1