57 while( newcapacity < required )
81 if( hypergraph->
memedges < required )
85 while( newcapacity < required )
96 hypergraph->
memedges + 1, newcapacity + 1) );
125 while( newcapacity < required )
131 SCIPdebugMessage(
"ensuring memory for %d vertex/edge pairs.\n", newcapacity);
151 while( newcapacity < required )
197 while( newcapacity < required )
203 SCIPdebugMessage(
"ensuring memory for %d overlaps' vertices.\n", newcapacity);
216 int memedgesvertices,
217 size_t sizevertexdata,
219 size_t sizeoverlapdata
230 assert(memedgesvertices > 0);
233 hypergraph = *phypergraph;
234 hypergraph->
blkmem = blkmem;
289 hypergraph = *phypergraph;
290 if( hypergraph ==
NULL )
398 if( pvertexdata !=
NULL )
434 beyond = first + nvertices;
437 for(
int i = 0;
i < nvertices; ++
i )
441 *pedge = hypergraph->
nedges;
442 if( pedgedata !=
NULL )
474 o1 = (size_t)key1 - 1;
475 o2 = (size_t)key2 - 1;
482 if( beyond1 - begin1 != beyond2 - begin2 )
486 for(
int i1 = begin1; i1 < beyond1; ++i1 )
514 hash = (uint32_t) (beyond - begin);
515 for(
i = begin + 2;
i < beyond;
i += 3 )
522 else if(
i - 2 < beyond )
553 beyond = first + nvertices;
555 for(
int i = 0;
i < nvertices; ++
i )
559 nextoverlap = (size_t) hypergraph->
noverlaps + 1UL;
561 if( element !=
NULL )
563 *poverlap = (size_t)element - 1;
593 int memCommonVertices = 32;
594 int* commonVertices =
NULL;
595 int numCommonVertices;
596 int memEdgeOverlapPairs;
597 int numEdgeOverlapPairs = 0;
616 overlapHashGetKey, overlapHashKeyEqPtr, overlapHashKeyValPtr, hypergraph) );
622 memEdgeOverlapPairs = 2 * (hypergraph->
nedges + hypergraph->
noverlaps) + 2;
633 if( eSize > memCommonVertices )
636 newcapacity = memCommonVertices;
637 while( memCommonVertices < eSize )
638 memCommonVertices *= 2;
644 for(
int i = 0;
i < eSize; ++
i )
652 for(
int j = vFirst; j < vBeyond; ++j )
669 numCommonVertices = 0;
672 while( ie < eBeyond && je < fBeyond )
683 if( numCommonVertices == 0 && u != v )
689 commonVertices[numCommonVertices++] = u;
696 if( numCommonVertices >= 2 )
703 uint64_t ocardinalitybits;
707 if( handler !=
NULL )
713 if( numEdgeOverlapPairs >= memEdgeOverlapPairs - 1 )
716 2 * memEdgeOverlapPairs) );
717 memEdgeOverlapPairs *= 2;
723 assert(numCommonVertices >= 0);
726 obits = (uint64_t) overlap;
727 ocardinalitybits = ((uint64_t) numCommonVertices) << 24;
728 ebits = ((uint64_t) e) << 40;
729 ebits |= ocardinalitybits | obits;
730 fbits = ((uint64_t) f) << 40;
731 fbits |= ocardinalitybits | obits;
732 edgeOverlapPairs[numEdgeOverlapPairs] = (
long long) ebits;
733 edgeOverlapPairs[numEdgeOverlapPairs + 1] = (
long long) fbits;
734 numEdgeOverlapPairs += 2;
740 SCIPdebugMessage(
"found %d edge-overlap incidences, including possible duplicates.\n", numEdgeOverlapPairs);
744 for(
int i = 0;
i < numEdgeOverlapPairs; ++
i)
746 if( o < 0 || edgeOverlapPairs[
i] != edgeOverlapPairs[o] )
747 edgeOverlapPairs[++o] = edgeOverlapPairs[
i];
750 numEdgeOverlapPairs = o + 1;
751 SCIPdebugMessage(
"found %d unique edge-overlap incidences.\n", numEdgeOverlapPairs);
759 while( newcapacity < hypergraph->nedges )
779 while( newcapacity < numEdgeOverlapPairs )
787 for(
int i = 0;
i < numEdgeOverlapPairs; ++
i )
793 bits = (uint64_t) edgeOverlapPairs[
i];
794 edge = (int) (bits >> 40);
795 overlap = bits & ((1L << 24) - 1L);
797 while( lastEdge < edge )
801 while( lastEdge < hypergraph->nedges )
825 while( newcapacity < hypergraph->nvertices )
839 SCIPdebugMessage(
"ensuring memory for %d vertices' edges slice.\n", newcapacity);
849 while( newcapacity < nincidences )
863 for(
int i = 0;
i < nincidences; ++
i)
885 for(
int i = first;
i < beyond; ++
i )
937 int* commonVertices =
NULL;
938 int memCommonVertices;
941 int numCommonVertices = 0;
946 assert(first >= 0 && first < hypergraph->nedges);
947 assert(second >= 0 && second < hypergraph->nedges);
957 while(
i < firstBeyond && j < secondBeyond )
970 commonVertices[numCommonVertices++] = u;
977 if( (*poverlap) < 0 && pvertex !=
NULL )
978 *pvertex = numCommonVertices > 0 ? commonVertices[0] : -1;
1008 while( newcapacity < hypergraph->noverlaps )
1022 SCIPdebugMessage(
"ensuring memory for %d overlaps' edges slice.\n", newcapacity);
1032 while( newcapacity < nincidences )
1038 SCIPdebugMessage(
"ensuring memory for %d overlaps' edges.\n", newcapacity);
1047 for(
int i = 0;
i < nincidences; ++
i )
1069 for(
int i = first;
i < beyond; ++
i )
1109 while( newcapacity < hypergraph->nvertices )
1123 SCIPdebugMessage(
"ensuring memory for %d vertices' overlaps slice.\n", newcapacity);
1133 while( newcapacity < nincidences )
1139 SCIPdebugMessage(
"ensuring memory for %d vertices' overlaps.\n", newcapacity);
1148 for(
int i = 0;
i < nincidences; ++
i )
1170 for(
int i = first;
i < beyond; ++
i )
1207 while(
i < size1 && j < size2 )
1209 if( vertices1[
i] < vertices2[j] )
1211 else if( vertices1[
i] > vertices2[j] )
1233 long long* incidences1 =
NULL;
1234 long long* incidences2 =
NULL;
1244 for(
int i = 0;
i < esize; ++
i )
1248 incidences1[i1++] = pair;
1252 if ( i1 != nincidences )
1257 fprintf(file,
"SCIPhypergraphIsValid detected inconsistency: "
1258 "number of incidences is claimed to be %d but counting via edges yields %d!\n", nincidences, i1);
1267 for(
int j = first; j < beyond; ++j )
1271 incidences2[i2++] = pair;
1275 if ( i2 != nincidences )
1280 fprintf(file,
"SCIPhypergraphIsValid detected inconsistency: "
1281 "number of incidences is claimed to be %d but counting via vertices yields %d!\n", nincidences, i2);
1291 for(
int i = 0;
i < nincidences; ++
i )
1293 if( incidences1[
i] != incidences2[
i] )
1298 fprintf(file,
"SCIPhypergraphIsValid detected inconsistency: "
1299 "incidence #%d is %lld (via edges) and %lld (via vertices)!\n",
i, incidences1[
i], incidences2[
i]);
1313 long long* incidences1 =
NULL;
1314 long long* incidences2 =
NULL;
1324 for(
int i = 0;
i < esize; ++
i )
1328 incidences1[i1++] = pair;
1332 if ( i1 != nincidences )
1337 fprintf(file,
"SCIPhypergraphIsValid detected inconsistency: "
1338 "number of incidences is claimed to be %d but counting via edges yields %d!\n", nincidences, i1);
1347 for(
int j = first; j < beyond; ++j )
1351 incidences2[i2++] = pair;
1355 if ( i2 != nincidences )
1360 fprintf(file,
"SCIPhypergraphIsValid detected inconsistency: "
1361 "number of incidences is claimed to be %d but counting via vertices yields %d!\n", nincidences, i2);
1371 for(
int i = 0;
i < nincidences; ++
i )
1373 if( incidences1[
i] != incidences2[
i] )
1378 fprintf(file,
"SCIPhypergraphIsValid detected inconsistency: "
1379 "incidence #%d is %lld (via edges) and %lld (via vertices)!\n",
i, incidences1[
i], incidences2[
i]);
1405 int lastcardinality = 0;
1409 for(
int i = 0;
i < esize; ++
i )
1410 marked[evertices[
i]] =
TRUE;
1413 for(
int i = first;
i < beyond &&
valid; ++
i )
1422 if (cardinality < 1 || cardinality < lastcardinality)
1427 fprintf(file,
"SCIPhypergraphIsValid detected inconsistency: edge e%d = {", e);
1428 for(
int k = 0; k < esize; ++k )
1430 fprintf(file,
"} has incidence #%d of [%d,%d) to overlap o%d = {",
i, first, beyond, o);
1433 fprintf(file,
"} of cardinality |o%d| = %d, but previous cardinality is %d.\n", o, cardinality,
1438 lastcardinality = cardinality;
1447 fprintf(file,
"SCIPhypergraphIsValid detected inconsistency: edge e%d = {", e);
1448 for(
int k = 0; k < esize; ++k )
1450 fprintf(file,
"} has incidence #%d of [%d,%d) to overlap o%d = {",
i, first, beyond, o);
1453 fprintf(file,
"} which is not a subset!\n");
1459 for(
int i = 0;
i < esize; ++
i )
1460 marked[evertices[
i]] =
FALSE;
1477 iterator->
base = -1;
1510 unsigned int minoverlapsize,
1518 assert(base < hypergraph->nedges);
1522 iterator->
base = base;
1624 while(
i < iend && j < jend )
1631 if( ivertex < jvertex )
1633 else if( ivertex > jvertex )
1689 return iterator->
base;
1734#undef SCIPhypergraphNumVertices
1735#undef SCIPhypergraphNumEdges
1736#undef SCIPhypergraphBlkmem
1737#undef SCIPhypergraphNumOverlaps
1738#undef SCIPhypergraphVertexData
1739#undef SCIPhypergraphEdgeData
1740#undef SCIPhypergraphOverlapData
1741#undef SCIPhypergraphEdgeSize
1742#undef SCIPhypergraphEdgeVertices
1743#undef SCIPhypergraphHasVertexEdges
1744#undef SCIPhypergraphVerticesEdgesFirst
1745#undef SCIPhypergraphVerticesEdgesBeyond
1746#undef SCIPhypergraphVerticesEdgesGet
1747#undef SCIPhypergraphHasOverlaps
1748#undef SCIPhypergraphOverlapSize
1749#undef SCIPhypergraphOverlapVertices
1750#undef SCIPhypergraphEdgesOverlapsFirst
1751#undef SCIPhypergraphEdgesOverlapsBeyond
1752#undef SCIPhypergraphEdgesOverlapsGet
1753#undef SCIPhypergraphHasOverlapsEdges
1754#undef SCIPhypergraphOverlapsEdgesFirst
1755#undef SCIPhypergraphOverlapsEdgesBeyond
1756#undef SCIPhypergraphOverlapsEdgesGet
1757#undef SCIPhypergraphHasVerticesOverlaps
1758#undef SCIPhypergraphVerticesOverlapsFirst
1759#undef SCIPhypergraphVerticesOverlapsBeyond
1760#undef SCIPhypergraphVerticesOverlapsGet
1780 return hypergraph->
nedges;
1790 return hypergraph->
blkmem;
1856 assert(edge >= 0 && edge < hypergraph->nedges);
1873 assert(edge >= 0 && edge < hypergraph->nedges);
1957 assert(overlap >= 0 && overlap < hypergraph->noverlaps);
1975 assert(overlap >= 0 && overlap < hypergraph->noverlaps);
1988 assert(edge >= 0 && edge < hypergraph->nedges);
2001 assert(edge >= 0 && edge < hypergraph->nedges);
#define SCIP_ALLOC_ABORT(x)
#define SCIP_CALL_ABORT(x)
void SCIPhashtableFree(SCIP_HASHTABLE **hashtable)
#define SCIPhashTwo(a, b)
#define SCIPhashFour(a, b, c, d)
#define SCIPhashThree(a, b, c)
SCIP_RETCODE SCIPhashtableCreate(SCIP_HASHTABLE **hashtable, BMS_BLKMEM *blkmem, int tablesize, SCIP_DECL_HASHGETKEY((*hashgetkey)), SCIP_DECL_HASHKEYEQ((*hashkeyeq)), SCIP_DECL_HASHKEYVAL((*hashkeyval)), void *userptr)
void * SCIPhashtableRetrieve(SCIP_HASHTABLE *hashtable, void *key)
SCIP_RETCODE SCIPhashtableInsert(SCIP_HASHTABLE *hashtable, void *element)
void SCIPsortLong(SCIP_Longint *longarray, int len)
void SCIPsortInt(int *intarray, int len)
assert(minobj< SCIPgetCutoffbound(scip))
void SCIPhypergraphIterStart(SCIP_HYPERGRAPH *hypergraph, SCIP_HYPERGRAPH_ITER *iterator, SCIP_HYPERGRAPH_EDGE base, unsigned int minoverlapsize, SCIP_Bool onlylater, SCIP_Bool findoverlaps)
initializes the iterator to the first adjacent edge of base
int SCIPhypergraphEdgesOverlapsBeyond(SCIP_HYPERGRAPH *hypergraph, SCIP_HYPERGRAPH_EDGE edge)
returns an index beyond the last overlap incident to edge
void SCIPhypergraphIterNext(SCIP_HYPERGRAPH *hypergraph, SCIP_HYPERGRAPH_ITER *iterator)
initializes the iterator to the first adjacent edge of base
static SCIP_RETCODE ensureNumEdgesVertices(SCIP_HYPERGRAPH *hypergraph, int required)
enlarges arrays for incident vertex/edge pairs to have capacity for at least required
SCIP_RETCODE SCIPhypergraphFree(SCIP_HYPERGRAPH **phypergraph)
frees a hypergraph
SCIP_HYPERGRAPH_EDGE SCIPhypergraphIterAdjacent(SCIP_HYPERGRAPH_ITER *iterator)
returns the current adjacent edge
SCIP_HYPERGRAPH_EDGE SCIPhypergraphIterBase(SCIP_HYPERGRAPH_ITER *iterator)
returns the base edge
SCIP_RETCODE SCIPhypergraphAddEdge(SCIP_HYPERGRAPH *hypergraph, int nvertices, SCIP_HYPERGRAPH_VERTEX *vertices, SCIP_HYPERGRAPH_EDGE *pedge, SCIP_HYPERGRAPH_EDGEDATA **pedgedata)
adds a new edge to the hypergraph
SCIP_HYPERGRAPH_OVERLAP SCIPhypergraphIterOverlap(SCIP_HYPERGRAPH_ITER *iterator)
returns the overlap for the intersection of the base and the current adjacent edge
int SCIPhypergraphOverlapsEdgesBeyond(SCIP_HYPERGRAPH *hypergraph, SCIP_HYPERGRAPH_OVERLAP overlap)
returns an index beyond the last edge incident to overlap
void SCIPhypergraphIterClear(SCIP_HYPERGRAPH *hypergraph, SCIP_HYPERGRAPH_ITER *iterator)
frees a hypergraph iterator's internal memory
SCIP_HYPERGRAPH_EDGE SCIPhypergraphVertexEdgesGetAtIndex(SCIP_HYPERGRAPH *hypergraph, int idx)
returns the edge corresponding to index that is incident to a vertex
int SCIPhypergraphVertexEdgesBeyond(SCIP_HYPERGRAPH *hypergraph, SCIP_HYPERGRAPH_VERTEX vertex)
returns an index beyond the last edge incident to vertex
SCIP_RETCODE SCIPhypergraphIntersectEdges(SCIP_HYPERGRAPH *hypergraph, SCIP_HYPERGRAPH_EDGE first, SCIP_HYPERGRAPH_EDGE second, SCIP_HYPERGRAPH_OVERLAP *poverlap, SCIP_HYPERGRAPH_VERTEX *pvertex)
finds the overlap or singleton vertex corresponding to the intersection of edges first and second
static SCIP_RETCODE ensureNumVertices(SCIP_HYPERGRAPH *hypergraph, int required)
enlarges vertex arrays to have capacity for at least required vertices
SCIP_Bool SCIPhypergraphIterValid(SCIP_HYPERGRAPH_ITER *iterator)
returns whether the iterator is valid
int SCIPhypergraphGetNEdges(SCIP_HYPERGRAPH *hypergraph)
returns the number of edges
int SCIPhypergraphVertexOverlapsBeyond(SCIP_HYPERGRAPH *hypergraph, SCIP_HYPERGRAPH_VERTEX vertex)
returns an index beyond the last overlap incident to vertex
SCIP_RETCODE SCIPhypergraphComputeVerticesEdges(SCIP_HYPERGRAPH *hypergraph)
computes each vertex' list of incident edges
SCIP_HYPERGRAPH_OVERLAPDATA * SCIPhypergraphOverlapData(SCIP_HYPERGRAPH *hypergraph, SCIP_HYPERGRAPH_OVERLAP overlap)
returns additional data of overlap
SCIP_RETCODE SCIPhypergraphAddVertex(SCIP_HYPERGRAPH *hypergraph, SCIP_HYPERGRAPH_VERTEX *pvertex, SCIP_HYPERGRAPH_VERTEXDATA **pvertexdata)
adds a new vertex to the hypergraph
int SCIPhypergraphEdgeSize(SCIP_HYPERGRAPH *hypergraph, SCIP_HYPERGRAPH_EDGE edge)
returns the number of vertices of edge
static SCIP_RETCODE ensureNumOverlaps(SCIP_HYPERGRAPH *hypergraph, int required)
enlarges overlap arrays to have capacity for at least required overlaps
SCIP_Bool SCIPhypergraphHasOverlapsEdges(SCIP_HYPERGRAPH *hypergraph)
returns whether overlaps' incident edges are known.
SCIP_Bool SCIPhypergraphOverlapsDisjoint(SCIP_HYPERGRAPH *hypergraph, SCIP_HYPERGRAPH_OVERLAP overlap1, SCIP_HYPERGRAPH_OVERLAP overlap2)
returns whether overlaps overlap1 and overlap2 are disjoint
SCIP_Bool SCIPhypergraphIsValid(SCIP_HYPERGRAPH *hypergraph, FILE *file)
asserts that the hypergraph data structures are valid
SCIP_RETCODE SCIPhypergraphOverlapFind(SCIP_HYPERGRAPH *hypergraph, int nvertices, SCIP_HYPERGRAPH_VERTEX *vertices, SCIP_HYPERGRAPH_OVERLAP *poverlap)
finds the overlap corresponding to vertex set vertices; returns -1 if it is not found
static SCIP_RETCODE ensureNumEdges(SCIP_HYPERGRAPH *hypergraph, int required)
enlarges edge arrays to have capacity for at least required edges
SCIP_RETCODE SCIPhypergraphClear(SCIP_HYPERGRAPH *hypergraph)
clears a hypergraph, deleting all vertices and edges
SCIP_Bool SCIPhypergraphHasOverlaps(SCIP_HYPERGRAPH *hypergraph)
returns whether edges' overlaps and overlaps' vertices are known.
SCIP_Bool SCIPhypergraphHasVertexOverlaps(SCIP_HYPERGRAPH *hypergraph)
returns whether vertices' incident overlaps are known
SCIP_HYPERGRAPH_VERTEX * SCIPhypergraphEdgeVertices(SCIP_HYPERGRAPH *hypergraph, SCIP_HYPERGRAPH_EDGE edge)
returns the array of vertices of edge
int SCIPhypergraphEdgesOverlapsFirst(SCIP_HYPERGRAPH *hypergraph, SCIP_HYPERGRAPH_EDGE edge)
returns an index for the first overlap incident to edge
int SCIPhypergraphOverlapsEdgesFirst(SCIP_HYPERGRAPH *hypergraph, SCIP_HYPERGRAPH_OVERLAP overlap)
returns an index for the first edge incident to overlap
SCIP_HYPERGRAPH_VERTEX SCIPhypergraphIterMinVertex(SCIP_HYPERGRAPH_ITER *iterator)
returns the minimum vertex in the intersection of the base and the current adjacent edge
SCIP_HYPERGRAPH_VERTEXDATA * SCIPhypergraphVertexData(SCIP_HYPERGRAPH *hypergraph, SCIP_HYPERGRAPH_VERTEX vertex)
returns additional data of vertex
SCIP_HYPERGRAPH_OVERLAP SCIPhypergraphVertexOverlapsGetAtIndex(SCIP_HYPERGRAPH *hypergraph, int idx)
returns the overlap corresponding to idx that is incident to a vertex
int SCIPhypergraphVertexOverlapsFirst(SCIP_HYPERGRAPH *hypergraph, SCIP_HYPERGRAPH_VERTEX vertex)
returns an index for the first overlap containing vertex
SCIP_RETCODE SCIPhypergraphComputeOverlapsEdges(SCIP_HYPERGRAPH *hypergraph)
computes all overlaps' lists of incident edges
SCIP_HYPERGRAPH_OVERLAP SCIPhypergraphOverlapsEdgesGetAtIndex(SCIP_HYPERGRAPH *hypergraph, int idx)
returns the edge corresponding to idx that is incident to an overlap
SCIP_RETCODE SCIPhypergraphComputeOverlaps(SCIP_HYPERGRAPH *hypergraph, SCIP_DECL_HYPERGRAPH_OVERLAP((*handler)), void *userdata)
computes all overlaps and stores overlaps' vertices and all edges' overlaps
SCIP_RETCODE SCIPhypergraphComputeVerticesOverlaps(SCIP_HYPERGRAPH *hypergraph)
computes all vertices' lists of incident overlaps
int SCIPhypergraphGetNIncidences(SCIP_HYPERGRAPH *hypergraph)
returns the number of edge-vertex incidences
SCIP_Bool SCIPhypergraphHasVertexEdges(SCIP_HYPERGRAPH *hypergraph)
returns whether vertices' incident edges are known.
int SCIPhypergraphGetNVertices(SCIP_HYPERGRAPH *hypergraph)
returns the number of vertices
SCIP_HYPERGRAPH_OVERLAP SCIPhypergraphEdgesOverlapsGetAtIndex(SCIP_HYPERGRAPH *hypergraph, int idx)
returns the overlap corresponding to idx that is incident to an edge
SCIP_RETCODE SCIPhypergraphIterInit(SCIP_HYPERGRAPH *hypergraph, SCIP_HYPERGRAPH_ITER *iterator)
initializes a hypergraph iterator's internal memory
static SCIP_RETCODE findOverlap(SCIP_HYPERGRAPH *hypergraph, int nvertices, int *vertices, int *poverlap, SCIP_Bool add, SCIP_Bool *padded)
finds an overlap specified by a sorted vertex set, potentially adding it
int SCIPhypergraphVertexEdgesFirst(SCIP_HYPERGRAPH *hypergraph, SCIP_HYPERGRAPH_VERTEX vertex)
returns an index for the first edge incident to vertex
SCIP_HYPERGRAPH_VERTEX * SCIPhypergraphOverlapVertices(SCIP_HYPERGRAPH *hypergraph, SCIP_HYPERGRAPH_OVERLAP overlap)
returns the array of sorted vertices of overlap
int SCIPhypergraphOverlapSize(SCIP_HYPERGRAPH *hypergraph, SCIP_HYPERGRAPH_OVERLAP overlap)
returns the number of vertices of overlap
static SCIP_RETCODE ensureNumOverlapsVertices(SCIP_HYPERGRAPH *hypergraph, int required)
enlarges overlapVertices array to have capacity for at least required overlaps' vertices
int SCIPhypergraphGetNOverlaps(SCIP_HYPERGRAPH *hypergraph)
returns the number of overlaps
SCIP_HYPERGRAPH_EDGEDATA * SCIPhypergraphEdgeData(SCIP_HYPERGRAPH *hypergraph, SCIP_HYPERGRAPH_EDGE edge)
returns additional data of edge
BMS_BLKMEM * SCIPhypergraphBlkmem(SCIP_HYPERGRAPH *hypergraph)
returns the hypergraph's block memory structure
SCIP_RETCODE SCIPhypergraphCreate(SCIP_HYPERGRAPH **phypergraph, BMS_BLKMEM *blkmem, int memvertices, int memedges, int memoverlaps, int memedgesvertices, size_t sizevertexdata, size_t sizeedgedata, size_t sizeoverlapdata)
creates a hypergraph
Internal methods for dealing with hypergraphs.
#define BMSfreeBlockMemory(mem, ptr)
#define BMSallocBlockMemory(mem, ptr)
#define BMSallocBlockMemoryArray(mem, ptr, num)
#define BMSfreeBlockMemoryArray(mem, ptr, num)
#define BMSreallocBlockMemoryArray(mem, ptr, oldnum, newnum)
struct BMS_BlkMem BMS_BLKMEM
internal miscellaneous methods
public methods for message output
unsigned int minoverlapsize
SCIP_HYPERGRAPH_EDGE base
SCIP_HYPERGRAPH_OVERLAP overlap
SCIP_HYPERGRAPH_EDGE adjacent
SCIP_HYPERGRAPH_VERTEX * commonvertices
unsigned int findoverlaps
SCIP_HYPERGRAPH_VERTEX minvertex
SCIP_Bool hasverticesoverlaps
int memverticesoverlapsbeg
int * overlapsverticesbeg
SCIP_HYPERGRAPH_EDGE * edgesvertices
SCIP_HYPERGRAPH_OVERLAP * verticesoverlaps
int * verticesoverlapsbeg
SCIP_HYPERGRAPH_VERTEX * verticesedges
SCIP_Bool hasoverlapsedges
SCIP_HYPERGRAPH_OVERLAP * edgesoverlaps
SCIP_HYPERGRAPH_VERTEX * overlapsvertices
SCIP_HYPERGRAPH_EDGE * overlapsedges
SCIP_HASHTABLE * overlaphashtable
datastructures hypergraphs
int SCIP_HYPERGRAPH_OVERLAP
struct SCIP_Hypergraph SCIP_HYPERGRAPH
struct SCIP_Hypergraph_Iter SCIP_HYPERGRAPH_ITER
struct SCIP_Hypergraph_OverlapData SCIP_HYPERGRAPH_OVERLAPDATA
struct SCIP_Hypergraph_NodeData SCIP_HYPERGRAPH_VERTEXDATA
#define SCIP_DECL_HYPERGRAPH_OVERLAP(x)
int SCIP_HYPERGRAPH_VERTEX
struct SCIP_Hypergraph_EdgeData SCIP_HYPERGRAPH_EDGEDATA
#define SCIP_DECL_HASHKEYEQ(x)
#define SCIP_DECL_HASHGETKEY(x)
#define SCIP_DECL_HASHKEYVAL(x)
enum SCIP_Retcode SCIP_RETCODE