summaryrefslogtreecommitdiff
path: root/vere/pkg/noun/v2/allocate.c
blob: 0476f8a8f5e03481eb2607810e87b835237b3747 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
/// @file

#include "../allocate.h"
#include "v1/allocate.h"
#include "v2/allocate.h"

#include "v2/hashtable.h"
#include "log.h"
#include "v2/manage.h"
#include "options.h"
#include "retrieve.h"
#include "trace.h"
#include "vortex.h"

u3a_v2_road* u3a_v2_Road;

u3_noun
u3a_v2_rewritten_noun(u3_noun som)
{
  if ( c3y == u3a_v2_is_cat(som) ) {
    return som;
  }
  u3_post som_p = u3a_v2_rewritten(u3a_v1_to_off(som));

  if ( c3y == u3a_v2_is_pug(som) ) {
    som_p = u3a_v2_to_pug(som_p);
  }
  else {
    som_p = u3a_v2_to_pom(som_p);
  }

  return som_p;
}

/* u3a_v2_mig_rewrite_compact(): rewrite pointers in ad-hoc persistent road structures.
*/
void
u3a_v2_mig_rewrite_compact(void)
{
  u3a_v2_rewrite_noun(u3R_v2->ski.gul);
  u3a_v2_rewrite_noun(u3R_v2->bug.tax);
  u3a_v2_rewrite_noun(u3R_v2->bug.mer);
  u3a_v2_rewrite_noun(u3R_v2->pro.don);
  u3a_v2_rewrite_noun(u3R_v2->pro.day);
  u3a_v2_rewrite_noun(u3R_v2->pro.trace);
  u3h_v2_rewrite(u3R_v2->cax.har_p);

  u3R_v2->ski.gul = u3a_v2_rewritten_noun(u3R_v2->ski.gul);
  u3R_v2->bug.tax = u3a_v2_rewritten_noun(u3R_v2->bug.tax);
  u3R_v2->bug.mer = u3a_v2_rewritten_noun(u3R_v2->bug.mer);
  u3R_v2->pro.don = u3a_v2_rewritten_noun(u3R_v2->pro.don);
  u3R_v2->pro.day = u3a_v2_rewritten_noun(u3R_v2->pro.day);
  u3R_v2->pro.trace = u3a_v2_rewritten_noun(u3R_v2->pro.trace);
  u3R_v2->cax.har_p = u3a_v2_rewritten(u3R_v2->cax.har_p);
}

void
u3a_v2_rewrite_noun(u3_noun som)
{
  if ( c3n == u3a_v2_is_cell(som) ) {
    return;
  }

  if ( c3n == u3a_v2_rewrite_ptr(u3a_v1_to_ptr((som))) ) return;

  u3a_v2_cell* cel = (u3a_v2_cell*) u3a_v1_to_ptr(som);

  u3a_v2_rewrite_noun(cel->hed);
  u3a_v2_rewrite_noun(cel->tel);

  cel->hed = u3a_v2_rewritten_noun(cel->hed);
  cel->tel = u3a_v2_rewritten_noun(cel->tel);
}