00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017 #ifndef VCSN_AUTOMATA_IMPLEMENTATION_GEOMETRY_HXX
00018 # define VCSN_AUTOMATA_IMPLEMENTATION_GEOMETRY_HXX
00019
00020 namespace vcsn
00021 {
00022 # define GEOMETRY_TPARAM \
00023 template<typename HState, typename HTransition, typename Coords>
00024
00025 # define GEOMETRY \
00026 geometry<HState, HTransition, Coords>
00027
00028 GEOMETRY_TPARAM
00029 inline
00030 GEOMETRY::geometry()
00031 : states_(0), transitions_(0), initials_(0), finals_(0), name_(0)
00032 {}
00033
00034 GEOMETRY_TPARAM
00035 inline
00036 GEOMETRY& GEOMETRY::operator=(const GEOMETRY& obj)
00037 {
00038 return copy_from(obj);
00039 }
00040
00041 GEOMETRY_TPARAM
00042 inline
00043 GEOMETRY::geometry(const GEOMETRY& obj)
00044 : states_(0), transitions_(0), initials_(0), finals_(0), name_(0)
00045 {
00046 copy_from(obj);
00047 }
00048
00049 GEOMETRY_TPARAM
00050 inline
00051 GEOMETRY& GEOMETRY::copy_from(const GEOMETRY& obj)
00052 {
00053 if (obj.states_ != 0)
00054 {
00055 delete states_;
00056 states_ = new states_geometry_map_t(obj.states());
00057 }
00058 if (obj.transitions_ != 0)
00059 {
00060 delete transitions_;
00061 transitions_ = new transitions_geometry_map_t(obj.transitions());
00062 }
00063 if (obj.initials_ != 0)
00064 {
00065 delete initials_;
00066 initials_ = new initials_geometry_map_t(obj.initials());
00067 }
00068 if (obj.finals_ != 0)
00069 {
00070 delete finals_;
00071 finals_ = new finals_geometry_map_t(obj.finals());
00072 }
00073 if (obj.name_ != 0)
00074 {
00075 delete name_;
00076 name_ = new std::string(obj.name());
00077 }
00078 return *this;
00079 }
00080
00081 GEOMETRY_TPARAM
00082 inline
00083 GEOMETRY::~geometry()
00084 {
00085 delete states_;
00086 delete transitions_;
00087 delete initials_;
00088 delete finals_;
00089 delete name_;
00090 }
00091
00092
00093 GEOMETRY_TPARAM
00094 inline
00095 typename GEOMETRY::states_geometry_map_t&
00096 GEOMETRY::states()
00097 {
00098 if (! states_)
00099 states_ = new states_geometry_map_t();
00100 return *states_;
00101 }
00102
00103 GEOMETRY_TPARAM
00104 inline
00105 const typename GEOMETRY::states_geometry_map_t&
00106 GEOMETRY::states() const
00107 {
00108 if (! states_)
00109 states_ = new states_geometry_map_t();
00110 return *states_;
00111 }
00112
00113
00114 GEOMETRY_TPARAM
00115 inline
00116 typename GEOMETRY::transitions_geometry_map_t&
00117 GEOMETRY::transitions()
00118 {
00119 if (! transitions_)
00120 transitions_ = new transitions_geometry_map_t();
00121 return *transitions_;
00122 }
00123
00124 GEOMETRY_TPARAM
00125 inline
00126 const typename GEOMETRY::transitions_geometry_map_t&
00127 GEOMETRY::transitions() const
00128 {
00129 if (! transitions_)
00130 transitions_ = new transitions_geometry_map_t();
00131 return *transitions_;
00132 }
00133
00134
00135 GEOMETRY_TPARAM
00136 inline
00137 typename GEOMETRY::initials_geometry_map_t&
00138 GEOMETRY::initials()
00139 {
00140 if (! initials_)
00141 initials_ = new initials_geometry_map_t();
00142 return *initials_;
00143 }
00144
00145 GEOMETRY_TPARAM
00146 inline
00147 const typename GEOMETRY::initials_geometry_map_t&
00148 GEOMETRY::initials() const
00149 {
00150 if (! initials_)
00151 initials_ = new initials_geometry_map_t();
00152 return *initials_;
00153 }
00154
00155
00156 GEOMETRY_TPARAM
00157 inline
00158 typename GEOMETRY::finals_geometry_map_t&
00159 GEOMETRY::finals()
00160 {
00161 if (! finals_)
00162 finals_ = new finals_geometry_map_t();
00163 return *finals_;
00164 }
00165
00166 GEOMETRY_TPARAM
00167 inline
00168 const typename GEOMETRY::finals_geometry_map_t&
00169 GEOMETRY::finals() const
00170 {
00171 if (! finals_)
00172 finals_ = new finals_geometry_map_t();
00173 return *finals_;
00174 }
00175
00176
00177 GEOMETRY_TPARAM
00178 inline
00179 std::string&
00180 GEOMETRY::name()
00181 {
00182 if (! name_)
00183 name_ = new std::string();
00184 return *name_;
00185 }
00186
00187 GEOMETRY_TPARAM
00188 inline
00189 const std::string&
00190 GEOMETRY::name() const
00191 {
00192 if (! name_)
00193 name_ = new std::string();
00194 return *name_;
00195 }
00196
00197
00198 }
00199
00200
00201 #endif // ! VCSN_AUTOMATA_IMPLEMENTATION_GEOMETRY_HXX