00001 //:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: 00002 // 00003 // This file is part of E-Cell Simulation Environment package 00004 // 00005 // Copyright (C) 1996-2002 Keio University 00006 // 00007 //:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: 00008 // 00009 // 00010 // E-Cell is free software; you can redistribute it and/or 00011 // modify it under the terms of the GNU General Public 00012 // License as published by the Free Software Foundation; either 00013 // version 2 of the License, or (at your option) any later version. 00014 // 00015 // E-Cell is distributed in the hope that it will be useful, 00016 // but WITHOUT ANY WARRANTY; without even the implied warranty of 00017 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 00018 // See the GNU General Public License for more details. 00019 // 00020 // You should have received a copy of the GNU General Public 00021 // License along with E-Cell -- see the file COPYING. 00022 // If not, write to the Free Software Foundation, Inc., 00023 // 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. 00024 // 00025 //END_HEADER 00026 // 00027 // written by Koichi Takahashi <shafi@e-cell.org>, 00028 // E-Cell Project. 00029 // 00030 00031 #ifndef __ENTITY_HPP 00032 #define __ENTITY_HPP 00033 00034 #include "libecs.hpp" 00035 #include "EntityType.hpp" 00036 #include "PropertiedClass.hpp" 00037 #include "PropertyInterface.hpp" 00038 00039 00040 namespace libecs 00041 { 00042 00043 /** @addtogroup entities The Entities. 00044 Entities. 00045 00046 @ingroup libecs 00047 00048 00049 @{ 00050 */ 00051 00052 /** @file */ 00053 00054 DECLARE_VECTOR( EntityPtr, EntityVector ); 00055 00056 00057 /** 00058 Entity class is a base class for all components in the cell model. 00059 00060 */ 00061 00062 00063 LIBECS_DM_CLASS( Entity, PropertiedClass ) 00064 { 00065 00066 public: 00067 00068 LIBECS_DM_OBJECT_ABSTRACT( Entity ) 00069 { 00070 INHERIT_PROPERTIES( PropertiedClass ); 00071 00072 PROPERTYSLOT_SET_GET( String, Name ); 00073 00074 // PROPERTYSLOT_NO_LOAD_SAVE( String, FullID, 00075 // NULLPTR, &Entity::getFullIDString ); 00076 } 00077 00078 Entity(); 00079 virtual ~Entity(); 00080 00081 /** 00082 Get a System to which this Entity belongs. 00083 00084 @return a borrowed pointer to the super system. 00085 */ 00086 00087 SystemPtr getSuperSystem() const 00088 { 00089 return theSuperSystem; 00090 } 00091 00092 00093 /** 00094 Get a FullID of this Entity. 00095 00096 @return a FullID of this Entity. 00097 */ 00098 00099 const FullID getFullID() const; 00100 00101 00102 /** 00103 Get EntityType of this Entity. 00104 00105 This method is overridden in Variable, Process and System classes. 00106 00107 @return EntityType of this Entity object. 00108 @see EntityType 00109 */ 00110 00111 virtual const EntityType getEntityType() const 00112 { 00113 return EntityType( EntityType::ENTITY ); 00114 } 00115 00116 00117 00118 00119 /** 00120 Get a SystemPath of this Entity. 00121 00122 @note The SystemPath doesn't include ID of this Entity even if 00123 this Entity is a System. 00124 00125 @return a SystemPath of this Entity. 00126 */ 00127 00128 virtual const SystemPath getSystemPath() const; 00129 00130 00131 /// \name Properties 00132 //@{ 00133 00134 /** 00135 Set an identifier of this Entity. 00136 00137 @param anID an id of this Entry. 00138 */ 00139 00140 SET_METHOD( String, ID ) 00141 { 00142 theID = value; 00143 } 00144 00145 /** 00146 Get an id string of this Entity. 00147 00148 @return an id of this Entity. 00149 */ 00150 00151 GET_METHOD( String, ID ) 00152 { 00153 return theID; 00154 } 00155 00156 /** 00157 Set name of this Entity. 00158 00159 @param aName a name of this Entity. 00160 */ 00161 00162 SET_METHOD( String, Name ) 00163 { 00164 theName = value; 00165 } 00166 00167 /** 00168 Get a name of this Entity. 00169 00170 @return a name of this Entity. 00171 */ 00172 00173 GET_METHOD( String, Name ) 00174 { 00175 return theName; 00176 } 00177 00178 /** 00179 Get a FullID of this Entity as String. 00180 00181 @note Property name for this method is 'getFullID', not 00182 'getFullIDString.' 00183 00184 @return a FullID string of this Entity. 00185 */ 00186 00187 const String getFullIDString() const; 00188 00189 00190 //@} 00191 00192 00193 /** 00194 @internal 00195 00196 Set a supersystem of this Entity. 00197 00198 Usually no need to set this manually because a System object does 00199 this when an Entity is added to the System. 00200 00201 @param supersystem a pointer to a System to which this object belongs. 00202 */ 00203 00204 void setSuperSystem( SystemPtr const supersystem ) 00205 { 00206 theSuperSystem = supersystem; 00207 } 00208 00209 private: 00210 00211 // hide them 00212 Entity( EntityRef ); 00213 EntityRef operator=( EntityRef ); 00214 00215 private: 00216 00217 SystemPtr theSuperSystem; 00218 00219 00220 String theID; 00221 String theName; 00222 }; 00223 00224 00225 00226 /*@}*/ 00227 00228 } // namespace libecs 00229 00230 #endif /* __ENTITY_HPP */ 00231 00232 /* 00233 Do not modify 00234 $Author: shafi $ 00235 $Revision: 2529 $ 00236 $Date: 2005-11-19 10:36:40 +0100 (Sat, 19 Nov 2005) $ 00237 $Locker$ 00238 */
1.4.7