49 void*
ptrsplit(
void* p, ptrdiff_t& m);
51 void*
ptrjoin(
void* p, ptrdiff_t m);
55 return (
reinterpret_cast<ptrdiff_t
>(p) & 1) != 0;
60 return reinterpret_cast<void*
>(
reinterpret_cast<ptrdiff_t
>(p)+1);
65 return reinterpret_cast<void*
>(
reinterpret_cast<ptrdiff_t
>(p)-1);
69 return reinterpret_cast<void*
>(
reinterpret_cast<ptrdiff_t
>(p)|1);
73 return reinterpret_cast<void*
>(
reinterpret_cast<ptrdiff_t
>(p)&
74 ~static_cast<ptrdiff_t>(1));
78 ptrdiff_t mp =
reinterpret_cast<ptrdiff_t
>(p);
80 return reinterpret_cast<void*
>(mp & ~static_cast<ptrdiff_t>(1));
84 return reinterpret_cast<void*
>(
reinterpret_cast<ptrdiff_t
>(p) | m);
Support algorithms and datastructures
void * ptrjoin(void *p, ptrdiff_t m)
Join unmarked pointer p and m into marked pointer.
void * ptrsplit(void *p, ptrdiff_t &m)
Split possibly marked pointer p into mark m and unmarked pointer.
void * unmark(void *p)
Return unmarked pointer for a marked pointer p.
void * fmark(void *p)
Return marked pointer for p (possibly already marked)
void * funmark(void *p)
Return unmarked pointer for a possibly marked pointer p.
void * mark(void *p)
Return marked pointer for unmarked pointer p.
bool marked(void *p)
Check whether p is marked.
Gecode toplevel namespace