45 {
46 unsigneds *stack = &
solver->vectors.stack;
47 const size_t old_vector_size = kissat_size_vector (
vector);
48#ifdef LOGGING
49 const size_t old_offset = kissat_offset_vector (
solver,
vector);
50 LOG2 (
"enlarging vector %zu[%zu] at %p", old_offset, old_vector_size,
52#endif
54 const size_t new_vector_size = old_vector_size ? 2 * old_vector_size : 1;
59 size_t available = capacity - old_stack_size;
60 if (new_vector_size > available) {
61#if !defined(KISSAT_QUIET) || !defined(KISSAT_COMPACT)
63#endif
64 unsigned enlarged = 0;
65 do {
67
70 "of 2^%u entries %s exhausted",
73 enlarged++;
75
77 available = capacity - old_stack_size;
78 } while (new_vector_size > available);
79
80 if (enlarged) {
81 INC (vectors_enlarged);
82#if !defined(KISSAT_QUIET) || !defined(KISSAT_COMPACT)
84 const ptrdiff_t moved =
85 (char *) new_begin_stack - (char *) old_begin_stack;
86#endif
87#ifndef KISSAT_QUIET
89 "enlarged to %s entries %s (%s)",
92 (moved ? "moved" : "in place"));
93#endif
94#ifndef KISSAT_COMPACT
95 if (moved)
96 fix_vector_pointers_after_moving_stack (
solver, moved);
97#endif
98 }
101 }
102 unsigned *begin_old_vector = kissat_begin_vector (
solver,
vector);
103 unsigned *begin_new_vector =
END_STACK (*stack);
104 unsigned *middle_new_vector = begin_new_vector + old_vector_size;
105 unsigned *end_new_vector = begin_new_vector + new_vector_size;
107 const size_t old_bytes = old_vector_size * sizeof (unsigned);
108 const size_t delta_size = new_vector_size - old_vector_size;
110 const size_t delta_bytes = delta_size * sizeof (unsigned);
111 if (old_bytes) {
112 memcpy (begin_new_vector, begin_old_vector, old_bytes);
113 memset (begin_old_vector, 0xff, old_bytes);
114 }
115 solver->vectors.usable += old_vector_size;
116 kissat_add_usable (
solver, delta_size);
117 if (delta_bytes)
118 memset (middle_new_vector, 0xff, delta_bytes);
119#ifdef KISSAT_COMPACT
125#else
126 vector->begin = begin_new_vector;
127 vector->end = middle_new_vector;
128#ifdef LOGGING
129 const size_t new_offset =
vector->begin - stack->begin;
130 LOG2 (
"enlarged vector at %p to %zu[%zu]", (
void *)
vector, new_offset,
131 old_vector_size);
132#endif
133#endif
134 stack->end = end_new_vector;
137 return middle_new_vector;
138}
void kissat_fatal(const char *fmt,...)
ABC_NAMESPACE_IMPL_START void kissat_stack_enlarge(struct kissat *solver, chars *s, size_t bytes)