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 inline
00023 geometry::geometry()
00024 : states_(0), transitions_(0), initials_(0), finals_(0), name_(0)
00025 {}
00026
00027 inline
00028 geometry& geometry::operator=(const geometry& obj)
00029 {
00030 return copy_from(obj);
00031 }
00032
00033 inline
00034 geometry::geometry(const geometry& obj)
00035 : states_(0), transitions_(0), initials_(0), finals_(0), name_(0)
00036 {
00037 copy_from(obj);
00038 }
00039
00040 inline
00041 geometry& geometry::copy_from(const geometry& obj)
00042 {
00043 if (obj.states_ != 0)
00044 {
00045 delete states_;
00046 states_ = new states_geometry_map_t(obj.states());
00047 }
00048 if (obj.transitions_ != 0)
00049 {
00050 delete transitions_;
00051 transitions_ = new transitions_geometry_map_t(obj.transitions());
00052 }
00053 if (obj.initials_ != 0)
00054 {
00055 delete initials_;
00056 initials_ = new initials_geometry_map_t(obj.initials());
00057 }
00058 if (obj.finals_ != 0)
00059 {
00060 delete finals_;
00061 finals_ = new finals_geometry_map_t(obj.finals());
00062 }
00063 if (obj.name_ != 0)
00064 {
00065 delete name_;
00066 name_ = new std::string(obj.name());
00067 }
00068 return *this;
00069 }
00070
00071 inline
00072 geometry::~geometry()
00073 {
00074 delete states_;
00075 delete transitions_;
00076 delete initials_;
00077 delete finals_;
00078 delete name_;
00079 }
00080
00081
00082 inline
00083 geometry::states_geometry_map_t& geometry::states()
00084 {
00085 if (! states_)
00086 states_ = new states_geometry_map_t();
00087 return *states_;
00088 }
00089
00090 inline
00091 const geometry::states_geometry_map_t& geometry::states() const
00092 {
00093 if (! states_)
00094 states_ = new states_geometry_map_t();
00095 return *states_;
00096 }
00097
00098
00099 inline
00100 geometry::transitions_geometry_map_t& geometry::transitions()
00101 {
00102 if (! transitions_)
00103 transitions_ = new transitions_geometry_map_t();
00104 return *transitions_;
00105 }
00106
00107 inline
00108 const geometry::transitions_geometry_map_t& geometry::transitions() const
00109 {
00110 if (! transitions_)
00111 transitions_ = new transitions_geometry_map_t();
00112 return *transitions_;
00113 }
00114
00115
00116 inline
00117 geometry::initials_geometry_map_t& geometry::initials()
00118 {
00119 if (! initials_)
00120 initials_ = new initials_geometry_map_t();
00121 return *initials_;
00122 }
00123
00124 inline
00125 const geometry::initials_geometry_map_t& geometry::initials() const
00126 {
00127 if (! initials_)
00128 initials_ = new initials_geometry_map_t();
00129 return *initials_;
00130 }
00131
00132
00133 inline
00134 geometry::finals_geometry_map_t& geometry::finals()
00135 {
00136 if (! finals_)
00137 finals_ = new finals_geometry_map_t();
00138 return *finals_;
00139 }
00140
00141 inline
00142 const geometry::finals_geometry_map_t& geometry::finals() const
00143 {
00144 if (! finals_)
00145 finals_ = new finals_geometry_map_t();
00146 return *finals_;
00147 }
00148
00149
00150 inline
00151 std::string& geometry::name()
00152 {
00153 if (! name_)
00154 name_ = new std::string();
00155 return *name_;
00156 }
00157
00158 inline
00159 const std::string& geometry::name() const
00160 {
00161 if (! name_)
00162 name_ = new std::string();
00163 return *name_;
00164 }
00165
00166
00167 }
00168
00169
00170 #endif // ! VCSN_AUTOMATA_IMPLEMENTATION_GEOMETRY_HXX