File: OffsetSource.cpp

package info (click to toggle)
storm-lang 0.7.4-1
  • links: PTS, VCS
  • area: main
  • in suites:
  • size: 52,004 kB
  • sloc: ansic: 261,462; cpp: 140,405; sh: 14,891; perl: 9,846; python: 2,525; lisp: 2,504; asm: 860; makefile: 678; pascal: 70; java: 52; xml: 37; awk: 12
file content (73 lines) | stat: -rw-r--r-- 1,537 bytes parent folder | download | duplicates (2)
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
#include "stdafx.h"
#include "OffsetSource.h"
#include "OffsetReference.h"
#include "Core/Str.h"
#include "Core/StrBuf.h"

namespace code {

	OffsetSource::OffsetSource() : data() {
		refs = new (this) WeakSet<OffsetReference>();
	}

	OffsetSource::OffsetSource(Offset offset) : data(offset) {
		refs = new (this) WeakSet<OffsetReference>();
	}

	void OffsetSource::set(Offset offset) {
		data = offset;
		update();
	}

	Offset OffsetSource::offset() const {
		if (stolenBy)
			return stolenBy->offset();
		else
			return data;
	}

	OffsetSource *OffsetSource::findActual() {
		if (stolenBy)
			return stolenBy->findActual();
		else
			return this;
	}

	void OffsetSource::update() {
		WeakSet<OffsetReference>::Iter i = refs->iter();
		while (OffsetReference *ref = i.next())
			ref->onMoved(data);
	}

	void OffsetSource::steal(OffsetSource *from) {
		WeakSet<OffsetReference>::Iter i = from->refs->iter();
		while (OffsetReference *ref = i.next()) {
			refs->put(ref);
			ref->to = this;
			ref->onMoved(data);
		}

		from->refs->clear();

		// Make sure it gets its information from us!
		from->stolenBy = this;
	}

	void OffsetSource::toS(StrBuf *to) const {
		*to << title();
	}


	StrOffsetSource::StrOffsetSource(const wchar *title) : OffsetSource() {
		name = new (this) Str(title);
	}

	StrOffsetSource::StrOffsetSource(Str *title) : OffsetSource(), name(title) {}

	StrOffsetSource::StrOffsetSource(Str *title, Offset offset) : OffsetSource(offset), name(title) {}

	Str *StrOffsetSource::title() const {
		return name;
	}

}