6 #ifndef TAPKEE_POLICY_H_
7 #define TAPKEE_POLICY_H_
11 namespace tapkee_internal
18 virtual void*
getValue(
void**)
const = 0;
19 virtual void free(
void**)
const = 0;
20 virtual void clone(
void*
const*,
void**)
const = 0;
21 virtual void move(
void*
const*,
void**)
const = 0;
29 *dest =
new T(*reinterpret_cast<T const*>(src));
31 inline virtual void*
getValue(
void** src)
const
35 inline virtual void free(
void** src)
const
38 delete (*
reinterpret_cast<T**
>(src));
41 virtual void clone(
void*
const* src,
void** dest)
const
44 (*
reinterpret_cast<T**
>(dest))->~T();
45 *dest =
new T(**reinterpret_cast<T* const*>(src));
47 inline virtual void move(
void*
const* src,
void** dest)
const
49 (*
reinterpret_cast<T**
>(dest))->~T();
50 **
reinterpret_cast<T**
>(dest) = **reinterpret_cast<T* const*>(src);
64 virtual bool isInRange(
void*
const*,
void*,
void*)
const = 0;
65 virtual bool isEqual(
void*
const*,
void*)
const = 0;
66 virtual bool isNotEqual(
void*
const*,
void*)
const = 0;
67 virtual bool isPositive(
void*
const*)
const = 0;
69 virtual bool isNegative(
void*
const*)
const = 0;
71 virtual bool isGreater(
void*
const*,
void*)
const = 0;
72 virtual bool isLesser(
void*
const*,
void*)
const = 0;
78 virtual bool isInRange(
void*
const*,
void*,
void*)
const
82 virtual bool isEqual(
void*
const*,
void*)
const
116 #define default_policy_for(Type) \
118 struct PointerCheckerPolicyImpl<Type> : public CheckerPolicyBase \
120 inline Type value(void* v) const \
122 return *reinterpret_cast<Type*>(v); \
124 virtual bool isInRange(void* const* src, void* lower, void* upper) const \
126 Type v = value(*src); \
127 Type l = value(lower); \
128 Type u = value(upper); \
129 return (v>=l) && (v<u); \
131 virtual bool isEqual(void* const* src, void* other_src) const \
133 Type v = value(*src); \
134 Type ov = value(other_src); \
137 virtual bool isNotEqual(void* const* src, void* other_src) const \
139 Type v = value(*src); \
140 Type ov = value(other_src); \
143 virtual bool isPositive(void* const* src) const \
145 Type v = value(*src); \
148 virtual bool isNonNegative(void* const* src) const \
150 Type v = value(*src); \
153 virtual bool isNegative(void* const* src) const \
155 Type v = value(*src); \
158 virtual bool isNonPositive(void* const* src) const \
160 Type v = value(*src); \
163 virtual bool isGreater(void* const* src, void* lower) const \
165 Type v = value(*src); \
166 return (v>value(lower)); \
168 virtual bool isLesser(void* const* src, void* upper) const \
170 Type v = value(*src); \
171 return (v<value(upper)); \
179 template <
typename T>
virtual bool isLesser(void *const *, void *) const =0
virtual ~TypePolicyBase()
virtual void move(void *const *src, void **dest) const
virtual bool isNonNegative(void *const *) const
virtual bool isGreater(void *const *, void *) const
virtual void free(void **) const =0
virtual void * getValue(void **) const =0
virtual bool isPositive(void *const *) const
TypePolicyBase * getPolicy()
virtual bool isNegative(void *const *) const =0
virtual ~CheckerPolicyBase()
virtual void free(void **src) const
virtual void clone(void *const *src, void **dest) const
virtual bool isInRange(void *const *, void *, void *) const
virtual void move(void *const *, void **) const =0
virtual bool isEqual(void *const *, void *) const
virtual void * getValue(void **src) const
virtual bool isNotEqual(void *const *, void *) const =0
virtual bool isNonPositive(void *const *) const =0
virtual void clone(void *const *, void **) const =0
virtual bool isNotEqual(void *const *, void *) const
virtual void copyFromValue(void const *src, void **dest) const
virtual bool isNonPositive(void *const *) const
virtual void copyFromValue(void const *, void **) const =0
virtual bool isNonNegative(void *const *) const =0
virtual bool isPositive(void *const *) const =0
virtual bool isLesser(void *const *, void *) const
#define default_policy_for(Type)
virtual bool isNegative(void *const *) const
virtual bool isInRange(void *const *, void *, void *) const =0
CheckerPolicyBase * getCheckerPolicy()
virtual bool isEqual(void *const *, void *) const =0
virtual bool isGreater(void *const *, void *) const =0