48#ifdef SCIP_DEBUG_EXPRITER
53#define MAXSUBSCIPDEPTH 10
54#define MAXBACKTRACE 20
69#ifdef SCIP_DEBUG_EXPRITER
77 void* array[MAXBACKTRACE];
86 if( subscipdepth > MAXSUBSCIPDEPTH )
89 size = backtrace(array, MAXBACKTRACE);
90 strings = backtrace_symbols(array, size);
94 for(
i = 0;
i < size;
i++ )
95 strncpy(iterinitbacktrace[subscipdepth][iterpos][
i], strings[
i],
sizeof(iterinitbacktrace[0][0][0]));
98 while( size < MAXBACKTRACE )
99 iterinitbacktrace[subscipdepth][iterpos][size++][0] =
'\0';
111 assert(subscipdepth >= 0);
112 if( subscipdepth >= MAXSUBSCIPDEPTH )
114 SCIPerrorMessage(
"subscip depth %d too high to report active iterators", subscipdepth);
121 for( j = 0; j < MAXBACKTRACE; ++j )
123 if( iterinitbacktrace[subscipdepth][
i][j][0] ==
'\0' )
130#define storeBacktrace(subscipdepth, iterpos)
138 SCIPerrorMessage(
"Rebuild with SCIP_DEBUG_EXPRITER defined in src/scip/expriter.c to see where currently "
139 "active iterators were initialized.\n");
207 int newsize = size * 2;
357 ++iterdata->currentchild;
372 ++iterdata->currentchild;
382 return iterator->
curr;
392 child = iterator->
curr->
children[iterdata->currentchild];
412 return iterdata->parent;
439 (*iterator)->stat = stat;
440 (*iterator)->blkmem = blkmem;
469#undef SCIPexpriterIsInit
470#undef SCIPexpriterGetCurrent
471#undef SCIPexpriterGetStageDFS
472#undef SCIPexpriterGetChildIdxDFS
473#undef SCIPexpriterGetChildExprDFS
474#undef SCIPexpriterGetParentDFS
475#undef SCIPexpriterGetCurrentUserData
476#undef SCIPexpriterGetChildUserDataDFS
477#undef SCIPexpriterGetExprUserData
478#undef SCIPexpriterSetCurrentUserData
479#undef SCIPexpriterSetExprUserData
480#undef SCIPexpriterSetChildUserData
481#undef SCIPexpriterIsEnd
505 SCIP_Bool allowrevisit
520 SCIPerrorMessage(
"Maximal number of active expression iterators reached at subscip-depth %d.\n",
598 iterator->
curr = expr;
647 iterator->
curr = expr;
655 return iterator->
curr;
671 if( (iterator->
dfsstage & stopstages) == 0 )
689 return iterator->
curr;
917 return iterator->
curr;
949 return iterator->
curr;
964 return iterator->
curr;
#define SCIP_CALL_ABORT(x)
private functions to work with algebraic expressions
static SCIP_EXPR * doBfsNext(SCIP_EXPRITER *iterator)
static SCIP_EXPR * doDfsNext(SCIP_EXPRITER *iterator)
#define storeBacktrace(subscipdepth, iterpos)
static void printBacktraces(int subscipdepth)
static SCIP_RETCODE ensureStackSize(SCIP_EXPRITER *iterator, int size)
static void deinit(SCIP_EXPRITER *iterator)
void SCIPexpriterFree(SCIP_EXPRITER **iterator)
static void reverseTopologicalInsert(SCIP_EXPRITER *iterator, SCIP_EXPR *expr)
static SCIP_EXPR * doReverseTopologicalNext(SCIP_EXPRITER *iterator)
SCIP_RETCODE SCIPexpriterCreate(SCIP_STAT *stat, BMS_BLKMEM *blkmem, SCIP_EXPRITER **iterator)
int SCIPexprGetNChildren(SCIP_EXPR *expr)
SCIP_Bool SCIPexpriterIsEnd(SCIP_EXPRITER *iterator)
SCIP_EXPR * SCIPexpriterSkipDFS(SCIP_EXPRITER *iterator)
SCIP_EXPRITER_USERDATA SCIPexpriterGetCurrentUserData(SCIP_EXPRITER *iterator)
void SCIPexpriterSetExprUserData(SCIP_EXPRITER *iterator, SCIP_EXPR *expr, SCIP_EXPRITER_USERDATA userdata)
SCIP_EXPR * SCIPexpriterGetCurrent(SCIP_EXPRITER *iterator)
void SCIPexpriterSetStagesDFS(SCIP_EXPRITER *iterator, SCIP_EXPRITER_STAGE stopstages)
SCIP_Bool SCIPexpriterIsInit(SCIP_EXPRITER *iterator)
SCIP_EXPR * SCIPexpriterRestartDFS(SCIP_EXPRITER *iterator, SCIP_EXPR *expr)
SCIP_EXPR * SCIPexpriterGetParentDFS(SCIP_EXPRITER *iterator)
void SCIPexpriterSetCurrentUserData(SCIP_EXPRITER *iterator, SCIP_EXPRITER_USERDATA userdata)
SCIP_EXPR * SCIPexpriterGetNext(SCIP_EXPRITER *iterator)
SCIP_EXPR ** SCIPexprGetChildren(SCIP_EXPR *expr)
void SCIPexpriterSetChildUserData(SCIP_EXPRITER *iterator, SCIP_EXPRITER_USERDATA userdata)
int SCIPexpriterGetChildIdxDFS(SCIP_EXPRITER *iterator)
SCIP_EXPRITER_USERDATA SCIPexpriterGetChildUserDataDFS(SCIP_EXPRITER *iterator)
SCIP_EXPRITER_STAGE SCIPexpriterGetStageDFS(SCIP_EXPRITER *iterator)
SCIP_RETCODE SCIPexpriterInit(SCIP_EXPRITER *iterator, SCIP_EXPR *expr, SCIP_EXPRITER_TYPE type, SCIP_Bool allowrevisit)
SCIP_EXPRITER_USERDATA SCIPexpriterGetExprUserData(SCIP_EXPRITER *iterator, SCIP_EXPR *expr)
SCIP_EXPR * SCIPexpriterGetChildExprDFS(SCIP_EXPRITER *iterator)
void SCIPqueueFree(SCIP_QUEUE **queue)
SCIP_RETCODE SCIPqueueCreate(SCIP_QUEUE **queue, int initsize, SCIP_Real sizefac)
void SCIPqueueClear(SCIP_QUEUE *queue)
SCIP_RETCODE SCIPqueueInsert(SCIP_QUEUE *queue, void *elem)
SCIP_Bool SCIPqueueIsEmpty(SCIP_QUEUE *queue)
void * SCIPqueueRemove(SCIP_QUEUE *queue)
assert(minobj< SCIPgetCutoffbound(scip))
#define BMSfreeBlockMemory(mem, ptr)
#define BMSfreeBlockMemoryArray(mem, ptr, num)
#define BMSreallocBlockMemoryArray(mem, ptr, oldnum, newnum)
#define BMSallocClearBlockMemory(mem, ptr)
struct BMS_BlkMem BMS_BLKMEM
public methods for message output
public data structures and miscellaneous methods
SCIP_EXPRITER_TYPE itertype
SCIP_EXPRITER_STAGE dfsstage
SCIP_EXPRITERDATA iterdata[SCIP_EXPRITER_MAXNACTIVE]
SCIP_Longint exprlastvisitedtag
structure definitions related to algebraic expressions
datastructures for problem statistics
#define SCIP_EXPRITER_MAXNACTIVE
struct SCIP_ExprIterData SCIP_EXPRITERDATA
#define SCIP_EXPRITER_VISITINGCHILD
@ SCIP_EXPRITER_RTOPOLOGIC
#define SCIP_EXPRITER_VISITEDCHILD
#define SCIP_EXPRITER_LEAVEEXPR
#define SCIP_EXPRITER_ENTEREXPR
unsigned int SCIP_EXPRITER_STAGE
enum SCIP_Retcode SCIP_RETCODE