diff --git a/uppsrc/Core/Index.h b/uppsrc/Core/Index.h index 4fb6dace4..b77a83697 100644 --- a/uppsrc/Core/Index.h +++ b/uppsrc/Core/Index.h @@ -164,6 +164,7 @@ public: V PickKeys() pick_ { return key; } const V& GetKeys() const { return key; } + bool IsPicked(void) const { return key.IsPicked(); } // Pick assignment & copy. Picked source can only Clear(), ~AIndex(), operator=, operator<<= diff --git a/uppsrc/Core/Vcont.cpp b/uppsrc/Core/Vcont.cpp index 9fc228e2d..cd67aa67b 100644 --- a/uppsrc/Core/Vcont.cpp +++ b/uppsrc/Core/Vcont.cpp @@ -8,6 +8,23 @@ struct Vector_ { int alloc; }; +#ifdef _DEBUG + +void *break_when_picked; + +void BreakWhenPicked(void *ptr) +{ + if(ptr == break_when_picked) + __BREAK__; +} + +void BREAK_WHEN_PICKED__(void *ptr) +{ + break_when_picked = ptr; +} + +#endif + void VectorReAlloc_(void *v_, int newalloc, int sizeofT) { Vector_ *v = (Vector_*)v_; diff --git a/uppsrc/Core/Vcont.h b/uppsrc/Core/Vcont.h index 7a09d2f6e..23b17ac44 100644 --- a/uppsrc/Core/Vcont.h +++ b/uppsrc/Core/Vcont.h @@ -1,3 +1,14 @@ +#ifdef _DEBUG +void BreakWhenPicked(void *ptr); +void BREAK_WHEN_PICKED__(void *ptr); + +template +void BREAK_WHEN_PICKED(T& x) +{ + BREAK_WHEN_PICKED__(&x); +} +#endif + template class Vector : public MoveableAndDeepCopyOption< Vector > { T *vector; @@ -6,7 +17,12 @@ class Vector : public MoveableAndDeepCopyOption< Vector > { static void RawFree(T *ptr) { if(ptr) MemoryFree(ptr); } static T *RawAlloc(int& n); + +#ifdef _DEBUG + static Vector& SetPicked(pick_ Vector& v) { BreakWhenPicked(&v); Vector& p = (Vector&)(v); p.items = -1; p.vector = NULL; return p; } +#else static Vector& SetPicked(pick_ Vector& v) { Vector& p = (Vector&)(v); p.items = -1; p.vector = NULL; return p; } +#endif void Pick(pick_ Vector& v);