--- trunk/src/utils/GenericData.hpp 2004/10/21 16:22:01 132 +++ trunk/src/utils/GenericData.hpp 2009/11/25 20:02:06 1390 @@ -1,28 +1,44 @@ /* - * Copyright (C) 2000-2004 Object Oriented Parallel Simulation Engine (OOPSE) project - * - * Contact: oopse@oopse.org - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public License - * as published by the Free Software Foundation; either version 2.1 - * of the License, or (at your option) any later version. - * All we ask is that proper credit is given for our work, which includes - * - but is not limited to - adding the above copyright notice to the beginning - * of your source code files, and to any copyright notice that you may distribute - * with programs based on this work. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + * Copyright (c) 2005 The University of Notre Dame. All Rights Reserved. * + * The University of Notre Dame grants you ("Licensee") a + * non-exclusive, royalty free, license to use, modify and + * redistribute this software in source and binary code form, provided + * that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the + * distribution. + * + * This software is provided "AS IS," without a warranty of any + * kind. All express or implied conditions, representations and + * warranties, including any implied warranty of merchantability, + * fitness for a particular purpose or non-infringement, are hereby + * excluded. The University of Notre Dame and its licensors shall not + * be liable for any damages suffered by licensee as a result of + * using, modifying or distributing the software or its + * derivatives. In no event will the University of Notre Dame or its + * licensors be liable for any lost revenue, profit or data, or for + * direct, indirect, special, consequential, incidental or punitive + * damages, however caused and regardless of the theory of liability, + * arising out of the use of or inability to use software, even if the + * University of Notre Dame has been advised of the possibility of + * such damages. + * + * SUPPORT OPEN SCIENCE! If you use OpenMD or its source code in your + * research, please cite the appropriate papers when you publish your + * work. Good starting points are: + * + * [1] Meineke, et al., J. Comp. Chem. 26, 252-271 (2005). + * [2] Fennell & Gezelter, J. Chem. Phys. 124, 234104 (2006). + * [3] Sun, Lin & Gezelter, J. Chem. Phys. 128, 24107 (2008). + * [4] Vardeman & Gezelter, in progress (2009). */ - + /** * @file GenericData.hpp * @brief @@ -38,211 +54,204 @@ #include #include #include -namespace oopse{ +#include "config.h" +namespace OpenMD{ - /** - * @ class GenericData GenericData.hpp "utils/GenericData.hpp" - * @brief Base class for generic data which is associated with an id - */ - class GenericData{ - public: - GenericData() : id_("UndefinedGenericData"){} + /** + * @ class GenericData GenericData.hpp "utils/GenericData.hpp" + * @brief Base class for generic data which is associated with an id + */ + class GenericData{ + public: + GenericData() : id_("UndefinedGenericData"){} - GenericData(const std::string& id) { setID(id); } + GenericData(const std::string& id) { setID(id); } - /** virtual destructor */ - virtual ~GenericData() {} + /** virtual destructor */ + virtual ~GenericData() {} - /** - * Returns the id of this generic data - * - * @return the id of this generic data - * - * @see #setID - */ - const std::string getID() const { return id_; } + /** + * Returns the id of this generic data + * + * @return the id of this generic data + * + * @see #setID + */ + const std::string getID() const { return id_; } - /** - * Sets the id of this generic data - * - * @param id the id to be set - * - * @see #getID - */ - void setID(const std::string& id) { id_ = id; } + /** + * Sets the id of this generic data + * + * @param id the id to be set + * + * @see #getID + */ + void setID(const std::string& id) { id_ = id; } - private: - GenericData(const GenericData&); - GenericData& operator=(GenericData&); - std::string id_; + private: + GenericData(const GenericData&); + GenericData& operator=(GenericData&); + std::string id_; - }; + }; - /** - * @class SimpleTypeData - * @brief SimpleTypeData class is a POD repository class - * @warning ElemDataType must be copy constructible, and copy assignable - */ - template class SimpleTypeData : public GenericData{ + /** + * @class SimpleTypeData + * @brief SimpleTypeData class is a POD repository class + * @warning ElemDataType must be copy constructible, and copy assignable + */ + template class SimpleTypeData : public GenericData{ - public: - SimpleTypeData() : GenericData(), data_(ElemDataType()) {} - SimpleTypeData(const std::string& id) : GenericData(id), data_(ElemDataType()) {} + public: + SimpleTypeData() : GenericData(), data_(ElemDataType()) {} + SimpleTypeData(const std::string& id) : GenericData(id), data_(ElemDataType()) {} + SimpleTypeData(const std::string&id , const ElemDataType& data) : GenericData(id), data_(data) {} + template + SimpleTypeData(const SimpleTypeData& s) { + data_ = s.getData(); + } - template - SimpleTypeData(const SimpleTypeData& s) { - data_ = s.getData(); - } - - SimpleTypeData& operator =(const SimpleTypeData& s) { - if (this == &s) - return *this; + SimpleTypeData& operator =(const SimpleTypeData& s) { + if (this == &s) + return *this; - data_ = s.getData(); - return *this; - } + data_ = s.getData(); + return *this; + } - template - SimpleTypeData& operator =(const SimpleTypeData& s) { - data_ = s.getData(); - return *this; - } + template + SimpleTypeData& operator =(const SimpleTypeData& s) { + data_ = s.getData(); + return *this; + } - /** Returns POD data */ - const ElemDataType& getData() const {return data_;} - ElemDataType& getData() {return data_;} - /** - * Sets POD data - * @data POD data to be set - */ - void setData(const ElemDataType& data) { data_ = data; } + /** Returns POD data */ + const ElemDataType& getData() const {return data_;} + ElemDataType& getData() {return data_;} + /** + * Sets POD data + * @data POD data to be set + */ + void setData(const ElemDataType& data) { data_ = data; } - private: - ElemDataType data_; - }; + private: + ElemDataType data_; + }; - /** BoolGenericData is a generic data type contains a bool variable */ - typedef SimpleTypeData BoolGenericData; + /** BoolGenericData is a generic data type contains a bool variable */ + typedef SimpleTypeData BoolGenericData; - /** IntGenericData is a generic data type contains an integer variable */ - typedef SimpleTypeData IntGenericData; + /** IntGenericData is a generic data type contains an integer variable */ + typedef SimpleTypeData IntGenericData; - /** FloatGenericData is a generic data type contains a float variable */ - typedef SimpleTypeData FloatGenericData; + /** FloatGenericData is a generic data type contains a float variable */ + typedef SimpleTypeData FloatGenericData; - /** DoubleGenericData is a generic data type contains a double variable */ - typedef SimpleTypeData DoubleGenericData; + /** DoubleGenericData is a generic data type contains a RealType variable */ + typedef SimpleTypeData DoubleGenericData; - /** - * @typedef StringGenericData - * A generic data type contains a string variable - * - * @code - * StringGenericData* s = new StringGenericData("MyStringGenericData"); - * PropertyMap propMap; - * GenericData* gdata; - * - * s->setData("OOPSE"); - * propMap->addProperty(s); - * - * gdata = propMap->getProperty("MyStringGenericData"); - * if (gdata != NULL){ - * s = dynamic_cast(gdata); - * if (s != NULL) - * std::cout << s->getData() << std::endl; - * } - * - * @endcode - */ - typedef SimpleTypeData StringGenericData; + /** + * @typedef StringGenericData + * A generic data type contains a std::string variable + * + * @code + * StringGenericData* s = new StringGenericData("MyStringGenericData"); + * PropertyMap propMap; + * GenericData* gdata; + * + * s->setData("OpenMD"); + * propMap->addProperty(s); + * + * gdata = propMap->getPropertyByName("MyStringGenericData"); + * if (gdata != NULL){ + * s = dynamic_cast(gdata); + * if (s != NULL) + * std::cout << s->getData() << std::endl; + * } + * + * @endcode + */ + typedef SimpleTypeData StringGenericData; - /** - * @class STLContainerTypeData - * @brief STL container type generic data which is associated with an id - * - * @template ContainerType - * @template ElemDataType - */ - template > class ContainerType, - typename ElemDataType > - class STLContainerTypeData : public GenericData, public ContainerType{ - public: - typedef STLContainerTypeData SelfType; - typedef ContainerType STLContainerType; + /** + * @class STLContainerTypeData + * @brief STL container type generic data which is associated with an id + * + * @template ContainerType + * @template ElemDataType + */ + template + class VectorTypeData : public GenericData { + public: + typedef VectorTypeData SelfType; - STLContainerTypeData(const std::string& id) - : GenericData(id), ContainerType () {} + VectorTypeData(const std::string& id) + : GenericData(id){} - STLContainerTypeData(const SelfType& s) : SelfType(s){} + VectorTypeData(const SelfType& s) : data_(s){} - SelfType& operator =(const SelfType& s){ - if (this == &s) - return *this; + SelfType& operator =(const SelfType& s){ + if (this == &s) + return *this; - STLContainerType::operator=(s); - return *this; - } - }; + this->data_ = s.data_; + return *this; + } + + private: + std::vector data_; + }; - /** - * @typedef IntVectorGenericData - * A generic data type contains a vector variable. - */ - typedef STLContainerTypeData IntVectorGenericData; + /** + * @typedef IntVectorGenericData + * A generic data type contains a std::vector variable. + */ + typedef VectorTypeData IntVectorGenericData; - /** - * @typedef IntVectorGenericData - * A generic data type contains a vector variable. - */ - typedef STLContainerTypeData FloatVectorGenericData; + /** + * @typedef IntVectorGenericData + * A generic data type contains a std::vector variable. + */ + typedef VectorTypeData FloatVectorGenericData; - /** - * @typedef IntVectorGenericData - * A generic data type contains a vector variable. - */ - typedef STLContainerTypeData DoubleVectorGenericData; + /** + * @typedef IntVectorGenericData + * A generic data type contains a std::vector variable. + */ + typedef VectorTypeData DoubleVectorGenericData; - /** - * @typedef StringVectorGenericData - * A generic data type contains a vector variable. - * - * @code - * StringVectorGenericData* sv = new StringVectorGenericData("MyStringVector"); - * GenericData* gdata; - * PropertyMap propMap; - * std::vector::iterator iter; - * - * sv->push_back("Hello World"); - * sv->push_back("OOPSE"); - * - * propMap.addProperty(sv); - * - * gdata = propMap.getProperty("MyStringVector"); - * - * if (gdata != NULL){ - * - * sv = dynamic_cast(gdata); - * - * if (sv != NULL){ - * for (iter = sv->begin(); iter != sv->end(); ++ iter) - * std::cout << *iter << std::endl; - * } - * } - * @endcode - */ - typedef STLContainerTypeData StringVectorGenericData; - - /** - * @typedef IntVectorGenericData - * A generic data type contains a list > variable. - */ - typedef STLContainerTypeData > IntVectorListGenericData; + /** + * @typedef StringVectorGenericData + * A generic data type contains a std::vector variable. + * + * @code + * StringVectorGenericData* sv = new StringVectorGenericData("MyStringVector"); + * GenericData* gdata; + * PropertyMap propMap; + * std::vector::iterator iter; + * + * sv->push_back("Hello World"); + * sv->push_back("OpenMD"); + * + * propMap.addProperty(sv); + * + * gdata = propMap.getPropertyByName("MyStringVector"); + * + * if (gdata != NULL){ + * + * sv = dynamic_cast(gdata); + * + * if (sv != NULL){ + * for (iter = sv->begin(); iter != sv->end(); ++ iter) + * std::cout << *iter << std::endl; + * } + * } + * @endcode + */ + typedef VectorTypeData StringVectorGenericData; -#define CHIVALUE_ID "CHIVALUE" -#define INTEGRALOFCHIDT_ID "INTEGRALOFCHIDT" -#define ETAVALUE_ID "ETAVALUE" -} // namespace oopse +} // namespace OpenMD #endif //UTIL _GENERICDATA_HPP