summaryrefslogtreecommitdiff
path: root/Database/internals/database-internal.cpp
blob: e19222ad5aa636a4c9be829783c681e0fd9418ef (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
#include "database-internal.h"

DatabaseCell::DatabaseCell(Cpu * cpu, Uint64 cpu_base, absolute_ptr origin, Uint32 size, Uint32 extra_size, DatabaseCell * prev, Database * parent) : cpu(cpu), next(0), prev(prev), parent(parent) {
    prev->next = this;
    parent->setEnd(this);
    if (origin) {
        Segment * origin_seg = parent->GetSegment(SEGID(origin));
        segment = new Segment(size, cpu_base, parent->GetNextSegId(), extra_size, origin_seg->getPristineMemory() + SEGOFFSET(origin));
    } else {
        segment = new Segment(size, cpu_base, parent->GetNextSegId(), extra_size);
    }
}

DatabaseCell::~DatabaseCell() {
    if (parent->getEnd() == this)
        parent->setEnd(prev);

    if (parent->getStart() == this)
        parent->setStart(next);

    if (next)
        next->prev = prev;
    if (prev)
        prev->next = next;

    delete segment;
}