C++ main module for mmsd Package  1.0
MM_Class.h
Go to the documentation of this file.
1 #ifndef MM_Class_H
2 #define MM_Class_H
3 
4 
5 #include "MM_Data.h"
6 
7 #include "MM_Attribute.h"
8 
16 
17 class MM_Class : public virtual MM_Data {
18  SP_OBJECT(MM_Class);
19  // ATTRIBUTES
20 
21 private:
22 
23 
24 
25 
26  // id of the class
27  tString mClassId;
28 
29  // attributes
30  map<tString,SP::MM_Attribute > mAttributes;
31 
32  // agregate association associations name -> list of shared pointers of data
33  map<tString,boost::shared_ptr< SV::MM_Data > >mCompositeAssociations;
34 
35  // simple association associations name -> list of weak pointers of data
36  map<tString,boost::shared_ptr< WV::MM_Data > >mSimpleAssociations;
37 
38 
39 
40 protected:
41  // METHODS
42 
43  // CONSTRUCTORS
44 
46  MM_Class(void);
47 
48 
49 
50  // DESTRUCTORS
51 
52 
55  virtual ~MM_Class(void);
56 
57 
58 
59 public:
60 //----------------
61 // NEW constructors
62 // ---------------
63 
66  inline static SP::MM_Class New() {
67  SP::MM_Class p(new MM_Class(),
69  p->setThis(p);
70  return p;
71  };
72 
73 
74  // ---------------------------
75  //composite association Methods
76  // -----------------------------
79  inline SV::MM_Data* getCompositeAssociation(const tString& name) const {
80  map<tString,boost::shared_ptr< SV::MM_Data> >::const_iterator association=mCompositeAssociations.find(name);
81  map<tString,boost::shared_ptr< SV::MM_Data> >::const_iterator end=mCompositeAssociations.end();
82  if (association==end) return null;
83  return association->second.get();
84  };
85 
89  inline SP::MM_Data getCompositeAssociation(const tString& name,const tVectorIndex& index) {
90  SP::MM_Data f;
91  map<tString,boost::shared_ptr< SV::MM_Data > >::iterator iter=mCompositeAssociations.find(name);
92  map<tString,boost::shared_ptr< SV::MM_Data > >::iterator end=mCompositeAssociations.end();
93  if (iter==end) {
94  // no composite association of name
95  return f;
96  }
97  SV::MM_Data* list=iter->second.get();
98  if (list->getSize()<=index) {
99  // indes too big
100  return f;
101  }
102  // retrun the value
103  return (*list)[index];
104  }
107  inline void setCompositeAssociation(const tString& name,const tVectorIndex& index,SP::MM_Data data) {
108  map<tString,boost::shared_ptr< SV::MM_Data > >::iterator iter=mCompositeAssociations.find(name);
109  map<tString,boost::shared_ptr< SV::MM_Data > >::iterator end=mCompositeAssociations.end();
110  boost::shared_ptr< SV::MM_Data > list;
111  if (iter==end) {
112  // association does not exists, create it
113  list=SV::MM_Data::New();
114  mCompositeAssociations[name]=list;
115  } else {
116  list=iter->second;
117  }
118  if (list->getSize()<=index) {
119  // size of assocition too small, increase it
120  list->setSize(index+1);
121 
122 
123  }
124  // set the value
125  list->set(index,data);
126  }
127 
128 
131  inline SV::MM_Data* createCompositeAssociation(const tString& name,const int& n) {
132  map<tString,boost::shared_ptr< SV::MM_Data > >::iterator iter=mCompositeAssociations.find(name);
133  map<tString,boost::shared_ptr< SV::MM_Data > >::iterator end=mCompositeAssociations.end();
134  boost::shared_ptr< SV::MM_Data > list;
135  if (iter==end) {
136  // association does not exists, create it
137  list=SV::MM_Data::New();
138  mCompositeAssociations[name]=list;
139  } else {
140  list=iter->second;
141  }
142  // set the size
143  list->setSize(n);
144  return list.get();
145  }
148  inline void clearCompositeAssociation(const tString& name) {
149  map<tString,boost::shared_ptr< SV::MM_Data> >::iterator association=mCompositeAssociations.find(name);
150  map<tString,boost::shared_ptr< SV::MM_Data> >::iterator end=mCompositeAssociations.end();
151  if (end!=association) {
152  association->second->clear();
153  }
154  };
157  inline void addCompositeAssociation(const tString& name,SP::MM_Data f) {
158  map<tString,boost::shared_ptr< SV::MM_Data> >::iterator association=mCompositeAssociations.find(name);
159  map<tString,boost::shared_ptr< SV::MM_Data> >::iterator end=mCompositeAssociations.end();
160  if (end==association) {
161  boost::shared_ptr< SV::MM_Data > list=SV::MM_Data::New();
162  list->add(f);
163  mCompositeAssociations[name]=list;
164  } else {
165  association->second->add(f);
166  }
167  };
170  inline int getCompositeAssociationsNumber() const {
171  return mCompositeAssociations.size();
172  };
175  inline int getCompositeAssociationCardinality(const tString& name) const {
176  map<tString,boost::shared_ptr< SV::MM_Data> >::const_iterator association=mCompositeAssociations.find(name);
177  map<tString,boost::shared_ptr< SV::MM_Data> >::const_iterator end=mCompositeAssociations.end();
178  if (association==end) return 0;
179  return association->second->getSize();
180  };
181 
184  inline void getCompositeAssociationsName(vector<tString>& fields) const {
185  fields.resize(0);
186  map<tString,boost::shared_ptr< SV::MM_Data> >::const_iterator iter=mCompositeAssociations.begin();
187  map<tString,boost::shared_ptr< SV::MM_Data> >::const_iterator end=mCompositeAssociations.end();
188  while (iter!=end) {
189  fields.push_back(iter->first);
190  iter++;
191  }
192  }
193  // ---------------------------
194  // simple assoiciation Methods
195  // -----------------------------
196 
200  inline SP::MM_Data getSimpleAssociation(const tString& name,const int& index) {
201  SP::MM_Data f;
202  map<tString,boost::shared_ptr< WV::MM_Data > >::iterator iter=mSimpleAssociations.find(name);
203  map<tString,boost::shared_ptr< WV::MM_Data > >::iterator end=mSimpleAssociations.end();
204 
205  if (iter==end) {
206  // no composite association of name
207  return f;
208  }
209  WV::MM_Data *list=iter->second.get();
210  if (list->getSize()<=index) {
211  // indes too big
212  return f;
213  }
214  // return the value
215  f=(*list)[index];
216  return f;
217  }
220  inline void setSimpleAssociation(const tString& name,const int& index,SP::MM_Data data) {
221  map<tString,boost::shared_ptr< WV::MM_Data > >::iterator iter=mSimpleAssociations.find(name);
222  map<tString,boost::shared_ptr< WV::MM_Data > >::iterator end=mSimpleAssociations.end();
223  boost::shared_ptr< WV::MM_Data> list;
224  if (iter==end) {
225  // association does not exists, create it
226  list=WV::MM_Data::New();
227  mSimpleAssociations[name]=list;
228  } else {
229  list=iter->second;
230  };
231 
232  if (list->getSize()<=index) {
233  // size of assocition too small, increase it
234  list->setSize(index+1);
235 
236 
237  }
238  // set the value
239  list->set(index,data);
240  }
241 
244  inline void addSimpleAssociation(const tString& name,SP::MM_Data f) {
245  map<tString,boost::shared_ptr< WV::MM_Data> >::iterator association=mSimpleAssociations.find(name);
246  map<tString,boost::shared_ptr< WV::MM_Data> >::iterator end=mSimpleAssociations.end();
247  if (end==association) {
248  boost::shared_ptr< WV::MM_Data > list=WV::MM_Data::New();
249  list->add(f);
250  association->second=list;
251  } else {
252  association->second->add(f);
253  }
254  };
255 
256 
259  inline WV::MM_Data* createSimpleAssociation(const tString& name,const int& n) {
260  map<tString,boost::shared_ptr< WV::MM_Data > >::iterator iter=mSimpleAssociations.find(name);
261  map<tString,boost::shared_ptr< WV::MM_Data > >::iterator end=mSimpleAssociations.end();
262  boost::shared_ptr< WV::MM_Data > list;
263  if (iter==end) {
264  // association does not exists, create it
265  list=WV::MM_Data::New();
266  mSimpleAssociations[name]=list;
267  }
268  // set the size
269  list->setSize(n);
270  return list.get();
271  }
272 
275  inline void clearSimpleAssociation(const tString& name) {
276  map<tString,boost::shared_ptr< WV::MM_Data> >::iterator association=mSimpleAssociations.find(name);
277  map<tString,boost::shared_ptr< WV::MM_Data> >::iterator end=mSimpleAssociations.end();
278  if (end!=association) {
279  association->second->clear();
280  }
281  };
282 
285  inline int getSimpleAssociationsNumber() const {
286  return mSimpleAssociations.size();
287  };
288 
291  inline int getSimpleAssociationCardinality(const tString& name) const {
292  map<tString,boost::shared_ptr< WV::MM_Data> >::const_iterator association=mSimpleAssociations.find(name);
293  map<tString,boost::shared_ptr< WV::MM_Data> >::const_iterator end=mSimpleAssociations.end();
294  if (association==end) return 0;
295  return association->second->getSize();
296  };
299  inline WV::MM_Data* getSimpleAssociation(const tString& name) const {
300  map<tString,boost::shared_ptr< WV::MM_Data> >::const_iterator association=mSimpleAssociations.find(name);
301  map<tString,boost::shared_ptr< WV::MM_Data> >::const_iterator end=mSimpleAssociations.end();
302  if (association==end) return null;
303  return association->second.get();
304  };
305 
308  inline void getSimpleAssociationsName(vector<tString>& fields) const {
309  fields.resize(0);
310  map<tString,boost::shared_ptr< WV::MM_Data > >::const_iterator iter=mSimpleAssociations.begin();
311  map<tString,boost::shared_ptr< WV::MM_Data> >::const_iterator end=mSimpleAssociations.end();
312  while (iter!=end) {
313  fields.push_back(iter->first);
314  iter++;
315  }
316  }
317  // -----------
318  // Attributes
319  // -----------
320 
323  inline int getAttributesNumber() const {
324  return mAttributes.size();
325  };
326 
327 
330  inline void setAttribute(const tString& name,SP::MM_Attribute f) {
331  mAttributes[name]=f;
332  };
333 
334 
337  inline SP::MM_Attribute getAttribute(const tString& name) {
338 
339  map<tString,SP::MM_Attribute>::iterator att=mAttributes.find(name);
340  map<tString,SP::MM_Attribute>::iterator end=mAttributes.end();
341  if (end==att) {
342  SP::MM_Attribute ret;
343  return ret;
344  } else {
345  return att->second;
346  }
347 
348  };
351  inline SPC::MM_Attribute getAttribute(const tString& name) const {
352 
353  map<tString,SP::MM_Attribute>::const_iterator att=mAttributes.find(name);
354  map<tString,SP::MM_Attribute>::const_iterator end=mAttributes.end();
355  if (end==att) {
356  SPC::MM_Attribute ret;
357  return ret;
358  } else {
359  return att->second;
360  }
361 
362  };
365  inline void getAttributesName(vector<tString>& fields) const {
366  fields.resize(0);
367 
368  map<tString,SP::MM_Attribute >::const_iterator iter=mAttributes.begin();
369  map<tString,SP::MM_Attribute >::const_iterator end=mAttributes.end();
370  while (iter!=end) {
371  fields.push_back(iter->first);
372  iter++;
373  }
374  };
375 
376  // ---------
377  // class id
378  // ---------
379 
380 
383  inline tString getClassId() const {
384  return mClassId;
385  };
388  inline void setClassId(const tString& id){
389  mClassId=id;
390  };
391 
392 
393  // ----------------
394  // general methods
395  // ----------------
396 
399  inline tBoolean setField(const tString& name,const tBoolean& isComposite,SP::MM_Data data) {
400  SP::MM_Attribute att=dynamic_sp_cast<MM_Attribute>(data);
401  if (att.get()!=null) {
402  setAttribute(name,att);
403  return true;
404  } else {
405 
406  SP::MM_Class cl=dynamic_sp_cast<MM_Class>(data);
407 
408  if (isComposite) setCompositeAssociation(name,0,cl);
409  else setSimpleAssociation(name,0,cl);
410  return true;
411  }
412  return false;
413  }
416  inline tBoolean hasField(const tString& name) const {
417  map<tString,boost::shared_ptr< WV::MM_Data> >::const_iterator sass=mSimpleAssociations.find(name);
418  map<tString,boost::shared_ptr< WV::MM_Data> >::const_iterator end_sass=mSimpleAssociations.end();
419  if (sass!=end_sass) return true;
420  map<tString,boost::shared_ptr< SV::MM_Data> >::const_iterator cass=mCompositeAssociations.find(name);
421  map<tString,boost::shared_ptr< SV::MM_Data> >::const_iterator end_cass=mCompositeAssociations.end();
422  if (cass!=end_cass) return true;
423 
424  map<tString,SP::MM_Attribute>::const_iterator att=mAttributes.find(name);
425  map<tString,SP::MM_Attribute>::const_iterator end_att=mAttributes.end();
426  return (att!=end_att);
427 
428  }
429 
430  /*\brief get the association with name at index
431  */
432  inline SP::MM_Data getAssociation(const tString& name,const int& index) {
433  SP::MM_Data data=getCompositeAssociation(name,index);
434  if (data.get()!=null) return data;
435  return getSimpleAssociation(name,index);
436  }
437  /*\brief get the association with name at index
438  */
439  inline int getAssociationCardinality(const tString& name) const {
440  map<tString,boost::shared_ptr< WV::MM_Data> >::const_iterator association=mSimpleAssociations.find(name);
441  map<tString,boost::shared_ptr< WV::MM_Data> >::const_iterator end=mSimpleAssociations.end();
442  if (association==end) {
443  map<tString,boost::shared_ptr< SV::MM_Data> >::const_iterator cassociation=mCompositeAssociations.find(name);
444  map<tString,boost::shared_ptr< SV::MM_Data> >::const_iterator cend=mCompositeAssociations.end();
445  if (cassociation==cend) return 0;
446  return cassociation->second->getSize();
447  } else {
448 
449  return association->second->getSize();
450  }
451  }
452 
453  /*\brief get the association with name
454  */
455  inline SP::MM_Data getAssociation(const tString& name) {
456  return getAssociation(name,0);
457  };
458 
459  /*\brief get the field with name
460  */
461  inline SP::MM_Data getField(const tString& name) {
462  SP::MM_Data data=getAssociation(name,0);
463  if (data.get()!=null) return data;
464  return getAttribute(name);
465  };
468  inline void getFieldNames(vector<tString>& fields) const {
469  fields.clear();
470 
471 
472  map<tString,SP::MM_Attribute >::const_iterator attributes;
473  attributes=mAttributes.begin();
474  while (mAttributes.end()!=attributes) {
475  fields.push_back(attributes->first);
476  attributes++;
477  }
478  map<tString,boost::shared_ptr< SV::MM_Data > >::const_iterator compositeAssociations;
479  compositeAssociations=mCompositeAssociations.begin();
480  while (mCompositeAssociations.end()!=compositeAssociations) {
481  fields.push_back(compositeAssociations->first);
482  compositeAssociations++;
483  }
484 
485 
486  map<tString,boost::shared_ptr< WV::MM_Data > >::const_iterator simpleAssociations;
487  simpleAssociations=mSimpleAssociations.begin();
488  while (mSimpleAssociations.end()!=simpleAssociations) {
489  fields.push_back(simpleAssociations->first);
490  simpleAssociations++;
491  }
492 
493 
494  }
497  virtual tString toString() const;
498 
499 
500 
501 
502 };
503 
504 #endif
void clearSimpleAssociation(const tString &name)
clear the composite association of name
Definition: MM_Class.h:275
void setAttribute(const tString &name, SP::MM_Attribute f)
set the attributes with name
Definition: MM_Class.h:330
tBoolean setField(const tString &name, const tBoolean &isComposite, SP::MM_Data data)
set th field
Definition: MM_Class.h:399
This class is a primary field.
Definition: MM_Attribute.h:15
WV::MM_Data * getSimpleAssociation(const tString &name) const
get the simple association
Definition: MM_Class.h:299
#define tVectorIndex
Definition: types.h:42
DEFINE_SPTR(MM_Class)
SV::MM_Data * getCompositeAssociation(const tString &name) const
get the simple association
Definition: MM_Class.h:79
int getCompositeAssociationsNumber() const
get the number of simple classes
Definition: MM_Class.h:170
virtual ~MM_Class(void)
destroy an object.
Definition: MM_Class.cpp:11
DEFINE_SVPTR(MM_Class)
#define tBoolean
Definition: types.h:48
SV::MM_Data * createCompositeAssociation(const tString &name, const int &n)
create a composite assocation of name name with size n
Definition: MM_Class.h:131
SP::MM_Data getAssociation(const tString &name)
Definition: MM_Class.h:455
tString getClassId() const
get the class id
Definition: MM_Class.h:383
#define null
Definition: types.h:13
SP::MM_Data getCompositeAssociation(const tString &name, const tVectorIndex &index)
get the index-th data from the composite association of name return null if not exists ...
Definition: MM_Class.h:89
This class is a description of class.
Definition: MM_Class.h:17
SP::MM_Data getAssociation(const tString &name, const int &index)
Definition: MM_Class.h:432
tBoolean hasField(const tString &name) const
return true if the class contains attribute or association with name
Definition: MM_Class.h:416
virtual tString toString() const
turn the class into string
Definition: MM_Class.cpp:17
void getFieldNames(vector< tString > &fields) const
get the field names
Definition: MM_Class.h:468
MM_Class(void)
create an object
Definition: MM_Class.cpp:4
SP::MM_Attribute getAttribute(const tString &name)
set the attributes with name
Definition: MM_Class.h:337
int getSimpleAssociationCardinality(const tString &name) const
get the cardinality of the simple association
Definition: MM_Class.h:291
int getAttributesNumber() const
get the number of attribute
Definition: MM_Class.h:323
void getAttributesName(vector< tString > &fields) const
get the fields name
Definition: MM_Class.h:365
int getSimpleAssociationsNumber() const
get the number of simple classes
Definition: MM_Class.h:285
int getAssociationCardinality(const tString &name) const
Definition: MM_Class.h:439
This class is a data.
Definition: MM_Data.h:17
void addSimpleAssociation(const tString &name, SP::MM_Data f)
add the association
Definition: MM_Class.h:244
WV::MM_Data * createSimpleAssociation(const tString &name, const int &n)
create a simple association of name name with size n
Definition: MM_Class.h:259
void clearCompositeAssociation(const tString &name)
clear the composite association of name
Definition: MM_Class.h:148
#define tString
Definition: types.h:49
void addCompositeAssociation(const tString &name, SP::MM_Data f)
add the association
Definition: MM_Class.h:157
void getSimpleAssociationsName(vector< tString > &fields) const
get the fields name
Definition: MM_Class.h:308
int getCompositeAssociationCardinality(const tString &name) const
get the cardinality of the simple association
Definition: MM_Class.h:175
SP::MM_Data getField(const tString &name)
Definition: MM_Class.h:461
void setClassId(const tString &id)
set the class id
Definition: MM_Class.h:388
static SP::MM_Class New()
creta a matlab class
Definition: MM_Class.h:66
SP::MM_Data getSimpleAssociation(const tString &name, const int &index)
get the index-th data from the simple association of name return null if not exists ...
Definition: MM_Class.h:200
void setSimpleAssociation(const tString &name, const int &index, SP::MM_Data data)
set the index-th data from the simple association of name
Definition: MM_Class.h:220
void getCompositeAssociationsName(vector< tString > &fields) const
get the fields name
Definition: MM_Class.h:184
SPC::MM_Attribute getAttribute(const tString &name) const
set the attributes with name
Definition: MM_Class.h:351
void setCompositeAssociation(const tString &name, const tVectorIndex &index, SP::MM_Data data)
set the index-th data from the composite association of name
Definition: MM_Class.h:107
class Free introduced for deleting a smart pointer
Definition: CORE_Object.h:106