aboutsummaryrefslogtreecommitdiff
path: root/engines/titanic/true_talk/tt_string_node.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'engines/titanic/true_talk/tt_string_node.cpp')
-rw-r--r--engines/titanic/true_talk/tt_string_node.cpp37
1 files changed, 37 insertions, 0 deletions
diff --git a/engines/titanic/true_talk/tt_string_node.cpp b/engines/titanic/true_talk/tt_string_node.cpp
index b1e2a642e4..da805fa9f1 100644
--- a/engines/titanic/true_talk/tt_string_node.cpp
+++ b/engines/titanic/true_talk/tt_string_node.cpp
@@ -29,6 +29,10 @@ TTstringNode::TTstringNode() : _pPrior(nullptr), _pNext(nullptr),
_field14(0), _mode(0), _field1C(0) {
}
+TTstringNode::~TTstringNode() {
+ detach();
+}
+
void TTstringNode::initialize(int mode) {
_mode = mode;
_field14 = 0;
@@ -41,12 +45,34 @@ void TTstringNode::initialize(int mode) {
}
}
+void TTstringNode::initialize(TTstringNode *oldNode) {
+ _mode = oldNode->_mode;
+ _field14 = oldNode->_field14;
+
+ if (_string.isValid()) {
+ _field1C = 0;
+ } else {
+ _field1C = 11;
+ warning("TTstringNode::initialize has bad subobj");
+ }
+
+ delete oldNode;
+}
+
void TTstringNode::addNode(TTstringNode *newNode) {
TTstringNode *tail = getTail();
tail->_pNext = newNode;
newNode->_pPrior = this;
}
+void TTstringNode::detach() {
+ if (_pPrior)
+ _pPrior->_pNext = _pNext;
+
+ if (_pNext)
+ _pNext->_pPrior = _pPrior;
+}
+
TTstringNode *TTstringNode::getTail() const {
if (_pNext == nullptr)
return nullptr;
@@ -58,6 +84,17 @@ TTstringNode *TTstringNode::getTail() const {
return node;
}
+TTstringNode *TTstringNode::scan(TTstringNode *start, const TTString &str, int mode) {
+ for (; start; start = start->_pNext) {
+ if (start->_mode == mode || (mode == 3 && start->_mode < 3)) {
+ if (!strcmp(start->_string.c_str(), str.c_str()))
+ start;
+ }
+ }
+
+ return nullptr;
+}
+
/*------------------------------------------------------------------------*/
TTsynonymNode::TTsynonymNode() : TTstringNode() {