DeviceAtlas C++ Api documentation
common_priv.h
1 #ifndef common_priv_h
2 #define common_priv_h
3 namespace Mobi { namespace Mtld { namespace Da {
4 
5 template <typename T> void
6 delall(T &container)
7 {
8  for (typename T::const_iterator it = container.begin(); it != container.end(); ++it)
9  delete *it;
10 }
11 
12 static inline int valueCmp(const Value *l, const Value *r) { return l->compare(*r); }
13 inline int
14 Value::compare (const Value &r) const
15 {
16  if (type != r.type)
17  return type - r.type;
18  switch (type) {
19  case Integer:
20  case Bool: return static_cast<int>(u.longval - r.u.longval);
21  case Float: return static_cast<int>(u.floatval - r.u.floatval);
22  case Set: {
23  if (set.size() != r.set.size())
24  return static_cast<int>(set.size() - r.set.size());
25  int cp = 0;
26  size_t s = set.size();
27  for (size_t i = 0; i < s; ++i)
28  if ((cp = set[i]->compare(*r.set[i])) != 0)
29  return cp;
30  return 0;
31  }
32  case String: return strcmp(u.strval, r.u.strval);
33  }
34 }
35 
36 class Values {
37  std::vector<Value *> data;
38 public:
39  Value *&operator[](size_t idx) {
40  if (data.size() <= idx)
41  data.resize(idx + 1, 0);
42  Value *&v = data[idx];
43  if (v == 0)
44  v = new Value();
45  return v;
46  }
47  ~Values() {
48  delall(data);
49  }
50 };
51 
52 
53 }
54 }
55 }
56 
57 #endif
58 
Definition: binary.h:13
Definition: common_priv.h:36
Definition: common.h:142