limal
ValueCheck.hpp
Go to the documentation of this file.
1 /*---------------------------------------------------------------------\
2 | |
3 | _ _ _ _ __ _ |
4 | | | | | | \_/ | / \ | | |
5 | | | | | | |_| | / /\ \ | | |
6 | | |__ | | | | | | / ____ \ | |__ |
7 | |____||_| |_| |_|/ / \ \|____| |
8 | |
9 | core library |
10 | |
11 | (C) SUSE Linux Products GmbH |
12 \----------------------------------------------------------------------/
13 
14  File: ValueCheck.hpp
15 
16  Author: Marius Tomaschewski
17  Maintainer: Marius Tomaschewski
18 
19  Purpose:
20 
21 /-*/
26 #ifndef LIMAL_VALUE_CHECK_HPP
27 #define LIMAL_VALUE_CHECK_HPP
28 
29 #include <limal/config.h>
30 #include <blocxx/String.hpp>
31 #include <blocxx/RefCount.hpp>
32 #include <blocxx/List.hpp>
33 
34 namespace LIMAL_NAMESPACE
35 {
36 
40 class ValueCheck;
41 
42 // -------------------------------------------------------------------
55 {
56 public:
60  virtual
62  {
63  }
64 
83  virtual bool
84  isValid(const blocxx::String &value) const = 0;
85 
102  virtual blocxx::String
103  explain(const blocxx::String &value) const = 0;
104 
105 protected:
110  : m_rcnt(0)
111  {
112  }
113 
114 private:
121 
125  ValueCheckBase & operator = (const ValueCheckBase &);
126 
131  friend class ValueCheck;
132 
136  blocxx::RefCount m_rcnt;
137 };
138 
139 
140 // -------------------------------------------------------------------
192 {
193 public:
200  ValueCheck();
201 
206  ValueCheck(ValueCheckBase *check);
207 
213  ValueCheck & operator=(ValueCheckBase *check);
214 
219  ValueCheck(const ValueCheck &ref);
220 
226  ValueCheck & operator=(const ValueCheck &ref);
227 
231  virtual ~ValueCheck();
232 
241  virtual bool
242  isValid(const blocxx::String &value) const;
243 
251  virtual blocxx::String
252  explain(const blocxx::String &value) const;
253 
261  ValueCheck&
262  And(const ValueCheck &ref);
263 
271  ValueCheck&
272  And(ValueCheckBase *check);
273 
281  ValueCheck&
282  Or(const ValueCheck &ref);
283 
291  ValueCheck&
292  Or(ValueCheckBase *check);
293 
310  ValueCheck&
311  Not();
312 
313 private:
314  /*
315  ** Relationship operators
316  */
317  enum ECheckOp { E_AND, E_OR };
318 
327  ValueCheck(const ValueCheck &ref, ECheckOp op);
328 
333  void
334  incRCnt(ValueCheckBase *ptr);
335 
341  void
342  delRCnt(ValueCheckBase *ptr);
343 
348 
352  bool m_neg;
353 
358 
362  blocxx::List<ValueCheck> m_list;
363 };
364 
365 
366 } // End of LIMAL_NAMESPACE
367 #endif // LIMAL_VALUE_CHECK_HPP
368 // vim: set ts=8 sts=8 sw=8 ai noet: