ABC: A System for Sequential Synthesis and Verification
 
Loading...
Searching...
No Matches
stack.c File Reference
#include "stack.h"
#include "allocate.h"
#include "utilities.h"
#include <assert.h>
Include dependency graph for stack.c:

Go to the source code of this file.

Functions

ABC_NAMESPACE_IMPL_START void kissat_stack_enlarge (struct kissat *solver, chars *s, size_t bytes)
 
void kissat_shrink_stack (struct kissat *solver, chars *s, size_t bytes)
 

Function Documentation

◆ kissat_shrink_stack()

void kissat_shrink_stack ( struct kissat * solver,
chars * s,
size_t bytes )

Definition at line 26 of file stack.c.

26 {
27 KISSAT_assert (bytes > 0);
28 const size_t old_bytes_capacity = CAPACITY_STACK (*s);
29 KISSAT_assert (kissat_aligned_word (old_bytes_capacity));
30 KISSAT_assert (!(old_bytes_capacity % bytes));
31 KISSAT_assert (kissat_is_zero_or_power_of_two (old_bytes_capacity / bytes));
32 const size_t old_bytes_size = SIZE_STACK (*s);
33 KISSAT_assert (!(old_bytes_size % bytes));
34 const size_t old_size = old_bytes_size / bytes;
35 size_t new_capacity;
36 if (old_size) {
37 const unsigned ld_old_size = kissat_log2_ceiling_of_word (old_size);
38 new_capacity = ((size_t) 1) << ld_old_size;
39 } else
40 new_capacity = 0;
41 KISSAT_assert (kissat_is_zero_or_power_of_two (new_capacity));
42 size_t new_bytes_capacity = new_capacity * bytes;
43 while (!kissat_aligned_word (new_bytes_capacity))
44 new_bytes_capacity <<= 1;
45 if (new_bytes_capacity == old_bytes_capacity)
46 return;
47 KISSAT_assert (new_bytes_capacity < old_bytes_capacity);
48 s->begin = (char*)kissat_realloc (solver, s->begin, old_bytes_capacity,
49 new_bytes_capacity);
50 s->allocated = s->begin + new_bytes_capacity;
51 s->end = s->begin + old_bytes_size;
52 KISSAT_assert (s->end <= s->allocated);
53}
void * kissat_realloc(kissat *solver, void *p, size_t old_bytes, size_t new_bytes)
Definition allocate.c:123
#define CAPACITY_STACK(S)
Definition stack.h:20
#define SIZE_STACK(S)
Definition stack.h:19
#define KISSAT_assert(ignore)
Definition global.h:13
#define solver
Definition kitten.c:211
Here is the call graph for this function:

◆ kissat_stack_enlarge()

ABC_NAMESPACE_IMPL_START void kissat_stack_enlarge ( struct kissat * solver,
chars * s,
size_t bytes )

Definition at line 9 of file stack.c.

9 {
10 const size_t size = SIZE_STACK (*s);
11 const size_t old_bytes = CAPACITY_STACK (*s);
12 KISSAT_assert (MAX_SIZE_T / 2 >= old_bytes);
13 size_t new_bytes;
14 if (old_bytes)
15 new_bytes = 2 * old_bytes;
16 else {
17 new_bytes = bytes;
18 while (!kissat_aligned_word (new_bytes))
19 new_bytes <<= 1;
20 }
21 s->begin = (char*)kissat_realloc (solver, s->begin, old_bytes, new_bytes);
22 s->allocated = s->begin + new_bytes;
23 s->end = s->begin + size;
24}
unsigned long long size
Definition giaNewBdd.h:39
#define MAX_SIZE_T
Definition utilities.h:45
Here is the call graph for this function:
Here is the caller graph for this function: