EventAttribute.h

Go to the documentation of this file.
00001 /* ========================================================================
00002  * Copyright (c) 2006,
00003  * Institute for Computer Graphics and Vision
00004  * Graz University of Technology
00005  * All rights reserved.
00006  *
00007  * Redistribution and use in source and binary forms, with or without
00008  * modification, are permitted provided that the following conditions are
00009  * met:
00010  *
00011  * Redistributions of source code must retain the above copyright notice,
00012  * this list of conditions and the following disclaimer.
00013  *
00014  * Redistributions in binary form must reproduce the above copyright
00015  * notice, this list of conditions and the following disclaimer in the
00016  * documentation and/or other materials provided with the distribution.
00017  *
00018  * Neither the name of the Graz University of Technology nor the names of
00019  * its contributors may be used to endorse or promote products derived from
00020  * this software without specific prior written permission.
00021  *
00022  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
00023  * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
00024  * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
00025  * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
00026  * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
00027  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
00028  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
00029  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
00030  * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
00031  * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
00032  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
00033  * ========================================================================
00034  * PROJECT: OpenTracker
00035  * ======================================================================== */
00042 /* ======================================================================= */
00043 
00044 #ifndef EVENTATTRIBUTE_HEADER
00045 #define EVENTATTRIBUTE_HEADER
00046 
00047 #include <iostream>
00048 #include <string>
00049 
00050 #include "EventAttributeBase.h"
00051 #include "iostream_ext.h"
00052 
00053 namespace ot
00054 {
00063     template <class T>
00064     class EventAttribute : public EventAttributeBase
00065     {
00066         friend class Event;
00067 
00068     private:
00072         EventAttribute()
00073         {
00074             genericTypeName = translator.getGenericName(typeid(T).name());
00075         };
00080         EventAttribute(const T &initValue)
00081             : value(initValue)
00082         {
00083             genericTypeName = translator.getGenericName(typeid(T).name());
00084         };
00089         EventAttribute(const EventAttribute &rv)
00090         {
00091             *this = rv;
00092         };
00101         static EventAttributeBase* create()
00102         {
00103             return new EventAttribute<T>;
00104         };
00112         EventAttributeBase& operator=(const EventAttributeBase &rv)
00113         {
00114             const EventAttribute<T> *trueRv = dynamic_cast< const EventAttribute<T>* >(&rv);
00115             if (trueRv)
00116                 value = trueRv->value;
00117             return *this;
00118         };
00123         void serialize(std::ostream &out)
00124         {
00125             out << value;
00126         };
00132         void deserialize(std::istream &in)
00133         {
00134             in >> value;
00135         };
00140         T& get()
00141         {
00142             return value;
00143         };
00149         const T& get() const
00150         {
00151             return value;
00152         };
00157         void set(const T &newValue)
00158         {
00159             value = newValue;
00160         };
00165         const std::type_info& getType() const
00166         {
00167             return typeid(T);
00168         };
00173         const std::string& getGenericTypeName() const
00174         {
00175             return genericTypeName;
00176         };
00177 
00178     private:
00180         T value;
00182         std::string genericTypeName;
00183     };
00184 
00185 } // namespace ot
00186 
00187 #endif
00188 
00189 /* 
00190  * ------------------------------------------------------------
00191  *   End of EventAttribute.h
00192  * ------------------------------------------------------------
00193  *   Automatic Emacs configuration follows.
00194  *   Local Variables:
00195  *   mode:c++
00196  *   c-basic-offset: 4
00197  *   eval: (c-set-offset 'substatement-open 0)
00198  *   eval: (c-set-offset 'case-label '+)
00199  *   eval: (c-set-offset 'statement 'c-lineup-runin-statements)
00200  *   eval: (setq indent-tabs-mode nil)
00201  *   End:
00202  * ------------------------------------------------------------ 
00203  */

Generated on Wed Feb 28 15:18:48 2007 for NaviTrack by  doxygen 1.4.6