BALL  1.4.2
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
property.h
Go to the documentation of this file.
1 // -*- Mode: C++; tab-width: 2; -*-
2 // vi: set ts=2:
3 //
4 // $Id: property.h,v 1.40 2005/12/23 17:01:41 amoll Exp $
5 //
6 
7 #ifndef BALL_CONCEPT_PROPERTY_H
8 #define BALL_CONCEPT_PROPERTY_H
9 
10 #ifndef BALL_COMMON_H
11 # include <BALL/common.h>
12 #endif
13 
14 #ifndef BALL_DATATYPE_BITVECTOR_H
15 # include <BALL/DATATYPE/bitVector.h>
16 #endif
17 
18 #ifndef BALL_CONCEPT_PERSISTENTOBJECT_H
20 #endif
21 
22 #include <iostream>
23 
24 #include <boost/shared_ptr.hpp>
25 #include <boost/any.hpp>
26 
27 namespace BALL
28 {
29 
34 
39  : public PersistentObject
40  {
41  public:
42 
44 
45 
51  enum Type
52  {
57 
60  INT,
61 
66 
70 
74 
79 
85 
92 
97  SMART_OBJECT
98  };
99 
101 
104 
105  /* The default constructor
106  */
107  NamedProperty();
108 
115  NamedProperty(const string& name);
116 
123  NamedProperty(const string& name, bool value);
124 
131  NamedProperty(const string& name, int value);
132 
139  NamedProperty(const string& name, unsigned int value);
140 
147  NamedProperty(const string& name, float value);
148 
155  NamedProperty(const string& name, double value);
156 
164  NamedProperty(const string& name, const string& str);
165 
173  NamedProperty(const string& name, PersistentObject& po);
174 
182  NamedProperty(const string& name, boost::shared_ptr<PersistentObject>& po);
183 
187 
191  NamedProperty(const NamedProperty&, const string& name);
192 
197  ~NamedProperty();
198 
201  virtual void clear();
202 
204 
207 
211  virtual void persistentWrite(PersistenceManager& pm, const char* name = "") const;
212 
216  virtual void persistentRead(PersistenceManager& pm);
217 
219 
222 
224  Type getType() const;
225 
227  const string& getName() const;
228 
233  bool getBool() const;
234 
239  int getInt() const;
240 
245  float getFloat() const;
246 
251  double getDouble() const;
252 
257  unsigned int getUnsignedInt() const;
258 
263  PersistentObject* getObject() const;
264 
269  boost::shared_ptr<PersistentObject> getSmartObject() const;
270 
275  String getString() const;
276 
279  String toString() const;
280 
282 
285 
289  bool operator == (const NamedProperty& np) const;
290 
294  bool operator != (const NamedProperty& np) const;
295 
297  void operator = (const NamedProperty& np);
298 
300 
301  private:
302 
303  /*_ The kind of information contained in the NamedProperty
304  */
306 
307  /*_ The name of the property object
308  */
309  string name_;
310 
311  /*_ The data
312  */
313  boost::any data_;
314 
315  };
316 
317  typedef std::vector<NamedProperty>::iterator NamedPropertyIterator;
318 
344  {
345  public:
346 
348 
349 
351 
352  BALL_INLINE
353 
355  PropertyManager();
356 
359  PropertyManager(const PropertyManager& property_manager);
360 
362  virtual ~PropertyManager();
363 
365  virtual void clear();
366 
368  virtual void destroy();
369 
371 
374 
378  void set(const PropertyManager& property_manager);
379 
386  const PropertyManager& operator = (const PropertyManager& property_manager);
387 
393  void get(PropertyManager& property_manager) const;
394 
398  void swap(PropertyManager& property_manager);
399 
401 
404 
411  BitVector& getBitVector();
412 
419  const BitVector& getBitVector() const;
420 
422 
425 
432  operator BitVector& ();
433 
435 
438 
444  void setProperty(Property property);
445 
451  void clearProperty(Property property);
452 
458  void toggleProperty(Property property);
459 
465  Size countProperties() const;
466 
468 
477 
481  const NamedProperty& getNamedProperty(Position index) const;
482 
486  NamedProperty& getNamedProperty(Position index);
487 
495  void setProperty(const NamedProperty& property);
496 
503  void setProperty(const string& name);
504 
512  void setProperty(const string& name, bool value);
513 
521  void setProperty(const string& name, int value);
522 
530  void setProperty(const string& name, unsigned int value);
531 
539  void setProperty(const string& name, float value);
540 
548  void setProperty(const string& name, double value);
549 
557  void setProperty(const string& name, const string& value);
558 
566  void setProperty(const string& name, const PersistentObject& value);
567 
574  const NamedProperty& getProperty(const string& name) const;
575 
577  NamedPropertyIterator beginNamedProperty();
578 
580  NamedPropertyIterator endNamedProperty();
581 
587  void clearProperty(const string& name);
588 
592  Size countNamedProperties() const;
594 
598 
599  bool hasProperty(Property property) const;
600 
602  bool hasProperty(const string& name) const;
603 
607  bool operator == (const PropertyManager& pm) const;
608 
610  bool operator != (const PropertyManager& pm) const;
611 
613 
614 
618 
619  void write(PersistenceManager& pm) const;
620 
622  bool read(PersistenceManager& pm);
624 
628 
633  bool isValid() const;
634 
641  void dump(std::ostream& s = std::cout, Size depth = 0) const;
642 
644 
645  private:
646 
648  std::vector<NamedProperty> named_properties_;
649  };
650 
652 
653 # ifndef BALL_NO_INLINE_FUNCTIONS
654 # include <BALL/CONCEPT/property.iC>
655 # endif
656 
657 } // namespace BALL
658 
659 #endif // BALL_CONCEPT_PROPERTY_H