ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/group/trunk/OOPSE-4/src/utils/GenericData.hpp
Revision: 2759
Committed: Wed May 17 21:51:42 2006 UTC (18 years, 1 month ago) by tim
File size: 7725 byte(s)
Log Message:
Adding single precision capabilities to c++ side

File Contents

# User Rev Content
1 gezelter 2204 /*
2 gezelter 1930 * Copyright (c) 2005 The University of Notre Dame. All Rights Reserved.
3 tim 1625 *
4 gezelter 1930 * The University of Notre Dame grants you ("Licensee") a
5     * non-exclusive, royalty free, license to use, modify and
6     * redistribute this software in source and binary code form, provided
7     * that the following conditions are met:
8     *
9     * 1. Acknowledgement of the program authors must be made in any
10     * publication of scientific results based in part on use of the
11     * program. An acceptable form of acknowledgement is citation of
12     * the article in which the program was described (Matthew
13     * A. Meineke, Charles F. Vardeman II, Teng Lin, Christopher
14     * J. Fennell and J. Daniel Gezelter, "OOPSE: An Object-Oriented
15     * Parallel Simulation Engine for Molecular Dynamics,"
16     * J. Comput. Chem. 26, pp. 252-271 (2005))
17     *
18     * 2. Redistributions of source code must retain the above copyright
19     * notice, this list of conditions and the following disclaimer.
20     *
21     * 3. Redistributions in binary form must reproduce the above copyright
22     * notice, this list of conditions and the following disclaimer in the
23     * documentation and/or other materials provided with the
24     * distribution.
25     *
26     * This software is provided "AS IS," without a warranty of any
27     * kind. All express or implied conditions, representations and
28     * warranties, including any implied warranty of merchantability,
29     * fitness for a particular purpose or non-infringement, are hereby
30     * excluded. The University of Notre Dame and its licensors shall not
31     * be liable for any damages suffered by licensee as a result of
32     * using, modifying or distributing the software or its
33     * derivatives. In no event will the University of Notre Dame or its
34     * licensors be liable for any lost revenue, profit or data, or for
35     * direct, indirect, special, consequential, incidental or punitive
36     * damages, however caused and regardless of the theory of liability,
37     * arising out of the use of or inability to use software, even if the
38     * University of Notre Dame has been advised of the possibility of
39     * such damages.
40 tim 1625 */
41 gezelter 1930
42 tim 1625 /**
43     * @file GenericData.hpp
44     * @brief
45     * @author tlin
46     * @date 09/20/2004
47     * @time 9:30am
48     * @version 1.0
49     */
50    
51     #ifndef UTIL_GENERICDATA_HPP
52     #define UTIL_GENERICDATA_HPP
53    
54     #include <list>
55 gezelter 1490 #include <string>
56     #include <vector>
57 tim 2759 #include "config.h"
58 tim 1625 namespace oopse{
59 gezelter 1490
60 gezelter 2204 /**
61     * @ class GenericData GenericData.hpp "utils/GenericData.hpp"
62     * @brief Base class for generic data which is associated with an id
63     */
64     class GenericData{
65     public:
66     GenericData() : id_("UndefinedGenericData"){}
67 gezelter 1490
68 gezelter 2204 GenericData(const std::string& id) { setID(id); }
69 gezelter 1490
70 gezelter 2204 /** virtual destructor */
71     virtual ~GenericData() {}
72 gezelter 1490
73    
74 gezelter 2204 /**
75     * Returns the id of this generic data
76     *
77     * @return the id of this generic data
78     *
79     * @see #setID
80     */
81     const std::string getID() const { return id_; }
82 gezelter 1490
83 gezelter 2204 /**
84     * Sets the id of this generic data
85     *
86     * @param id the id to be set
87     *
88     * @see #getID
89     */
90     void setID(const std::string& id) { id_ = id; }
91 gezelter 1490
92 tim 1625
93 gezelter 2204 private:
94     GenericData(const GenericData&);
95     GenericData& operator=(GenericData&);
96     std::string id_;
97 gezelter 1490
98 gezelter 2204 };
99 gezelter 1490
100 gezelter 2204 /**
101     * @class SimpleTypeData
102     * @brief SimpleTypeData class is a POD repository class
103     * @warning ElemDataType must be copy constructible, and copy assignable
104     */
105     template<typename ElemDataType> class SimpleTypeData : public GenericData{
106 gezelter 1490
107 gezelter 2204 public:
108     SimpleTypeData() : GenericData(), data_(ElemDataType()) {}
109     SimpleTypeData(const std::string& id) : GenericData(id), data_(ElemDataType()) {}
110     SimpleTypeData(const std::string&id , const ElemDataType& data) : GenericData(id), data_(data) {}
111     template<typename T>
112     SimpleTypeData(const SimpleTypeData<T>& s) {
113     data_ = s.getData();
114     }
115 gezelter 1490
116 gezelter 2204 SimpleTypeData<ElemDataType>& operator =(const SimpleTypeData<ElemDataType>& s) {
117     if (this == &s)
118     return *this;
119 tim 1625
120 gezelter 2204 data_ = s.getData();
121     return *this;
122     }
123 tim 1625
124 gezelter 2204 template<typename T>
125     SimpleTypeData<ElemDataType>& operator =(const SimpleTypeData<T>& s) {
126     data_ = s.getData();
127     return *this;
128     }
129 tim 1625
130 gezelter 2204 /** Returns POD data */
131     const ElemDataType& getData() const {return data_;}
132     ElemDataType& getData() {return data_;}
133     /**
134     * Sets POD data
135     * @data POD data to be set
136     */
137     void setData(const ElemDataType& data) { data_ = data; }
138 gezelter 1490
139 gezelter 2204 private:
140     ElemDataType data_;
141     };
142 gezelter 1490
143 gezelter 2204 /** BoolGenericData is a generic data type contains a bool variable */
144     typedef SimpleTypeData<bool> BoolGenericData;
145 gezelter 1490
146 gezelter 2204 /** IntGenericData is a generic data type contains an integer variable */
147     typedef SimpleTypeData<int> IntGenericData;
148 gezelter 1490
149 gezelter 2204 /** FloatGenericData is a generic data type contains a float variable */
150     typedef SimpleTypeData<float> FloatGenericData;
151 gezelter 1490
152 tim 2759 /** DoubleGenericData is a generic data type contains a RealType variable */
153     typedef SimpleTypeData<RealType> DoubleGenericData;
154 tim 1625
155 gezelter 2204 /**
156     * @typedef StringGenericData
157     * A generic data type contains a std::string variable
158     *
159     * @code
160     * StringGenericData* s = new StringGenericData("MyStringGenericData");
161     * PropertyMap propMap;
162     * GenericData* gdata;
163     *
164     * s->setData("OOPSE");
165     * propMap->addProperty(s);
166     *
167     * gdata = propMap->getPropertyByName("MyStringGenericData");
168     * if (gdata != NULL){
169     * s = dynamic_cast<StringGenericData*>(gdata);
170     * if (s != NULL)
171     * std::cout << s->getData() << std::endl;
172     * }
173     *
174     * @endcode
175     */
176     typedef SimpleTypeData<std::string> StringGenericData;
177 gezelter 1490
178 gezelter 2204 /**
179     * @class STLContainerTypeData
180     * @brief STL container type generic data which is associated with an id
181     *
182     * @template ContainerType
183     * @template ElemDataType
184     */
185     template <typename ElemDataType >
186     class VectorTypeData : public GenericData {
187     public:
188     typedef VectorTypeData<ElemDataType> SelfType;
189 gezelter 1490
190 gezelter 2204 VectorTypeData(const std::string& id)
191     : GenericData(id){}
192 tim 1625
193 gezelter 2577 VectorTypeData(const SelfType& s) : data_(s){}
194 gezelter 1490
195 gezelter 2204 SelfType& operator =(const SelfType& s){
196     if (this == &s)
197     return *this;
198 gezelter 1490
199 gezelter 2204 this->data_ = s.data_;
200     return *this;
201     }
202 tim 2069
203 gezelter 2204 private:
204     std::vector<ElemDataType> data_;
205     };
206 gezelter 1490
207 gezelter 2204 /**
208     * @typedef IntVectorGenericData
209     * A generic data type contains a std::vector<int> variable.
210     */
211     typedef VectorTypeData<int> IntVectorGenericData;
212 gezelter 1490
213 gezelter 2204 /**
214     * @typedef IntVectorGenericData
215     * A generic data type contains a std::vector<float> variable.
216     */
217     typedef VectorTypeData<float> FloatVectorGenericData;
218 gezelter 1490
219 gezelter 2204 /**
220     * @typedef IntVectorGenericData
221 tim 2759 * A generic data type contains a std::vector<RealType> variable.
222 gezelter 2204 */
223 tim 2759 typedef VectorTypeData<RealType> DoubleVectorGenericData;
224 gezelter 1490
225 gezelter 2204 /**
226     * @typedef StringVectorGenericData
227     * A generic data type contains a std::vector<string> variable.
228     *
229     * @code
230     * StringVectorGenericData* sv = new StringVectorGenericData("MyStringVector");
231     * GenericData* gdata;
232     * PropertyMap propMap;
233     * std::vector<std::string>::iterator iter;
234     *
235     * sv->push_back("Hello World");
236     * sv->push_back("OOPSE");
237     *
238     * propMap.addProperty(sv);
239     *
240     * gdata = propMap.getPropertyByName("MyStringVector");
241     *
242     * if (gdata != NULL){
243     *
244     * sv = dynamic_cast<StringVectorGenericData*>(gdata);
245     *
246     * if (sv != NULL){
247     * for (iter = sv->begin(); iter != sv->end(); ++ iter)
248     * std::cout << *iter << std::endl;
249     * }
250     * }
251     * @endcode
252     */
253     typedef VectorTypeData<std::string> StringVectorGenericData;
254 tim 1625
255 gezelter 1490
256 tim 1625 } // namespace oopse
257     #endif //UTIL _GENERICDATA_HPP