23extern Term Yap_MkArena(CELL *ptr, CELL *max);
24extern bool Yap_ArenaExpand(
size_t sz, CELL *arenap);
26#define MIN_ARENA_SIZE (1024L)
28#define MAX_ARENA_SIZE (2048 * MIN_ARENA_SIZE)
30#define Global_MkIntegerTerm(I) MkIntegerTerm(I)
32static size_t big2arena_szW(CELL *arena_base) {
33 return arena_base[2] + 4;
37static size_t arena2big_szW (
size_t sz) {
43static inline CELL *ArenaLimit(Term arena) {
44 CELL *arena_base = RepAppl(arena);
45 size_t szW = big2arena_szW(arena_base);
46 return arena_base + szW;
50static inline CELL *ArenaPt(Term arena) {
return RepAppl(arena); }
52static inline UInt ArenaSzW(Term arena) {
53 return big2arena_szW(RepAppl(arena));
63 CELL *arenaB, *arenaL;
74 WRITE_LOCK(ae->ARWLock);
78 if (pe->KindOfPE == GlobalProperty
80 && pe->owner_id == worker_id
83 WRITE_UNLOCK(ae->ARWLock);
88 new = (
GlobalEntry *) Yap_AllocAtomSpace(
sizeof(*
new));
89 INIT_RWLOCK(new->GRWLock);
90 new->KindOfPE = GlobalProperty;
92 new->owner_id = worker_id;
94 new->NextGE = LOCAL_GlobalVariables;
95 LOCAL_GlobalVariables =
new;
98 RESET_VARIABLE(&new->global);
99 WRITE_UNLOCK(ae->ARWLock);
A cell_space is a short code region, where we want bindings to proceed locally.