From 6a653b35990e9a642dd4af9b8ee5742d5a84956c Mon Sep 17 00:00:00 2001 From: unknown Date: Wed, 16 Sep 2009 22:24:08 -0700 Subject: Adding basic Database structure. --- Database/internals/database-references.cpp | 47 ++++++++++++++++++++++++++++++ 1 file changed, 47 insertions(+) create mode 100644 Database/internals/database-references.cpp (limited to 'Database/internals/database-references.cpp') diff --git a/Database/internals/database-references.cpp b/Database/internals/database-references.cpp new file mode 100644 index 0000000..8520f16 --- /dev/null +++ b/Database/internals/database-references.cpp @@ -0,0 +1,47 @@ +#include "database-references.h" + +RefFrom::RefFrom(RefTo * refTo, SegmentRefData * data) : refTo(refTo), data(data) { + assert(refto); + assert(data); + + next = data->getRefFrom(); + prev = 0; + data->firstRefFrom = this; + if (next) + next->prev = this; +} + +RefFrom::~RefFrom() { + if (next) + next->prev = prev; + if (prev) + prev->next = next; + else + data->setFirstRefFrom(next); +} + +RefTo::RefTo(absolute_ptr ptr, SegmentRefData * data, Database * database) : data(data) { + assert(database); + Segment * destSeg = database->getSegment(ptr.segment_id); + assert(destSeg); + refFrom = new RefFrom(this, destSeg->getSegmentRefData(ptr.ptr); + + RefTo * t = data->getRefTo(); + if (t) { + delete t; + data->setRefTo(this); + } +} + +RefTo::~RefTo() { + data->refTo = 0; + delete refFrom; +} + +SegmentRefData::SegmentRefData(Uint32 ptr, Segment * seg) : ptr(ptr), seg(seg) { + seg->setSegmentRefData(ptr, this); +} + +SegmentRefData::~SegmentRefData() { + seg->setSegmentRefData(ptr, 0); +} -- cgit v1.2.3