[Scummvm-cvs-logs] scummvm master -> c1aca1dce8ae1d8cf929412a6e8dc2ee356a94ca

sev- sev at scummvm.org
Sun May 22 22:18:26 CEST 2016


This automated email contains information about 3 new commits which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .

Summary:
0ff9e79127 UPDATES: Add 1.8.1 Mac release signature
cc54c7723c COMMON: Implement SortedArray
c1aca1dce8 SCUMM HE: Finish implementation of the Tree class


Commit: 0ff9e79127839c6bda8709c735cda23121d9b5a8
    https://github.com/scummvm/scummvm/commit/0ff9e79127839c6bda8709c735cda23121d9b5a8
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2016-05-22T22:12:59+02:00

Commit Message:
UPDATES: Add 1.8.1 Mac release signature

Changed paths:
    dists/macosx/scummvm_appcast.xml



diff --git a/dists/macosx/scummvm_appcast.xml b/dists/macosx/scummvm_appcast.xml
index 3d47c94..35fbc54 100644
--- a/dists/macosx/scummvm_appcast.xml
+++ b/dists/macosx/scummvm_appcast.xml
@@ -6,6 +6,16 @@
 		<description>Most recent changes with links to updates.</description>
 		<language>en</language>
 		<item>
+			<title>Version 1.8.1</title>
+			<sparkle:releaseNotesLink>
+				https://scummvm.org/frs/scummvm/1.8.1/ReleaseNotes
+			</sparkle:releaseNotesLink>
+			<pubDate>Wed, 25 May 2016 19:26:00 +0000</pubDate>
+			<enclosure url="https://www.scummvm.org/frs/scummvm/1.8.1/scummvm-1.8.1-macosx.dmg"
+						sparkle:version="1.8.1" length="15791070" type="application/octet-stream"
+						sparkle:dsaSignature="MC0CFQDF0u/pGH51pMPzCbsv07eCNxuGDQIUdrKWVTznbF69fzuzIieR4Lc0U2Y=" />
+		</item>
+		<item>
 			<title>Version 1.8.0</title>
 			<sparkle:releaseNotesLink>
 				https://scummvm.org/frs/scummvm/1.8.0/ReleaseNotes


Commit: cc54c7723cbfb7caaf770fce338c75c13a27d4b9
    https://github.com/scummvm/scummvm/commit/cc54c7723cbfb7caaf770fce338c75c13a27d4b9
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2016-05-22T22:12:59+02:00

Commit Message:
COMMON: Implement SortedArray

Changed paths:
    common/array.h



diff --git a/common/array.h b/common/array.h
index db1a62b..320b367 100644
--- a/common/array.h
+++ b/common/array.h
@@ -361,6 +361,57 @@ protected:
 
 };
 
+/**
+ * Double linked list with sorted nodes.
+ */
+template<class T>
+class SortedArray : public Array<T> {
+public:
+	typedef T *iterator;
+	typedef uint size_type;
+
+	SortedArray(int (*comparator)(const void *, const void *)) {
+		_comparator = comparator;
+	}
+
+	/**
+	 * Inserts element at the sorted position.
+	 */
+	void insert(const T &element) {
+		T *where = (T *)bsearch(element, this->front(), this->_size, sizeof(T), _comparator);
+		insert(where, element);
+	}
+
+	T &operator[](size_type idx) {
+		error("Operation not allowed with SortedArray");
+	}
+
+	void insert_at(size_type idx, const T &element) {
+		error("Operation not allowed with SortedArray");
+	}
+
+	void insert_at(size_type idx, const Array<T> &array) {
+		error("Operation not allowed with SortedArray");
+	}
+
+	void insert(iterator pos, const T &element) {
+		error("Operation not allowed with SortedArray");
+	}
+
+	void push_back(const T &element) {
+		error("Operation not allowed with SortedArray");
+	}
+
+	void push_back(const Array<T> &array) {
+		error("Operation not allowed with SortedArray");
+	}
+
+
+
+private:
+	int (*_comparator)(const void *, const void *);
+};
+
 } // End of namespace Common
 
 #endif


Commit: c1aca1dce8ae1d8cf929412a6e8dc2ee356a94ca
    https://github.com/scummvm/scummvm/commit/c1aca1dce8ae1d8cf929412a6e8dc2ee356a94ca
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2016-05-22T22:17:57+02:00

Commit Message:
SCUMM HE: Finish implementation of the Tree class

Changed paths:
    engines/scumm/he/moonbase/ai_tree.cpp
    engines/scumm/he/moonbase/ai_tree.h



diff --git a/engines/scumm/he/moonbase/ai_tree.cpp b/engines/scumm/he/moonbase/ai_tree.cpp
index efbf3e3..7bd44f6 100644
--- a/engines/scumm/he/moonbase/ai_tree.cpp
+++ b/engines/scumm/he/moonbase/ai_tree.cpp
@@ -25,10 +25,16 @@
 
 namespace Scumm {
 
+static int compareTreeNodes(const void *a, const void *b) {
+	return ((const TreeNode *)a)->value - ((const TreeNode *)b)->value;
+}
+
 Tree::Tree() {
 	pBaseNode = new Node;
 	_maxDepth = MAX_DEPTH;
 	_maxNodes = MAX_NODES;
+
+	_currentMap = new Common::SortedArray<TreeNode *>(compareTreeNodes);
 }
 
 Tree::Tree(IContainedObject *contents) {
@@ -36,6 +42,8 @@ Tree::Tree(IContainedObject *contents) {
 	pBaseNode->setContainedObject(contents);
 	_maxDepth = MAX_DEPTH;
 	_maxNodes = MAX_NODES;
+
+	_currentMap = new Common::SortedArray<TreeNode *>(compareTreeNodes);
 }
 
 Tree::Tree(IContainedObject *contents, int maxDepth) {
@@ -43,6 +51,8 @@ Tree::Tree(IContainedObject *contents, int maxDepth) {
 	pBaseNode->setContainedObject(contents);
 	_maxDepth = maxDepth;
 	_maxNodes = MAX_NODES;
+
+	_currentMap = new Common::SortedArray<TreeNode *>(compareTreeNodes);
 }
 
 Tree::Tree(IContainedObject *contents, int maxDepth, int maxNodes) {
@@ -50,6 +60,8 @@ Tree::Tree(IContainedObject *contents, int maxDepth, int maxNodes) {
 	pBaseNode->setContainedObject(contents);
 	_maxDepth = maxDepth;
 	_maxNodes = maxNodes;
+
+	_currentMap = new Common::SortedArray<TreeNode *>(compareTreeNodes);
 }
 
 void Tree::duplicateTree(Node *sourceNode, Node *destNode) {
@@ -68,6 +80,7 @@ Tree::Tree(const Tree *sourceTree) {
 	pBaseNode = new Node(sourceTree->getBaseNode());
 	_maxDepth = sourceTree->getMaxDepth();
 	_maxNodes = sourceTree->getMaxNodes();
+	_currentMap = new Common::SortedArray<TreeNode *>(compareTreeNodes);
 
 	duplicateTree(sourceTree->getBaseNode(), pBaseNode);
 }
@@ -80,7 +93,6 @@ Tree::~Tree() {
 	while (pNodeItr != NULL) {
 		// If any children are left, move to one of them
 		if (!(pNodeItr->getChildren().empty())) {
-			//int size = (pNodeItr->getChildren()).size();
 			pNodeItr = pNodeItr->popChild();
 		} else {
 			// Delete this node, and move up to the parent for further processing
@@ -90,13 +102,12 @@ Tree::~Tree() {
 			pTemp = NULL;
 		}
 	}
-}
 
+	delete _currentMap;
+}
 
 Node *Tree::aStarSearch() {
-	return NULL;
-#if 0
-	fnpMMap mmfpOpen;
+	Common::SortedArray<TreeNode *> mmfpOpen(compareTreeNodes);
 
 	Node *currentNode = NULL;
 	float currentT;
@@ -106,24 +117,24 @@ Node *Tree::aStarSearch() {
 	float temp = pBaseNode->getContainedObject()->calcT();
 
 	if (static_cast<int>(temp) != SUCCESS) {
-
-		mmfpOpen.insert(fnpMMap::value_type(pBaseNode->getObjectT(), pBaseNode));
+		mmfpOpen.insert(new TreeNode(pBaseNode->getObjectT(), pBaseNode));
 
 		while (mmfpOpen.size() && (retNode == NULL)) {
-			currentNode = mmfpOpen.begin()->second;
+			currentNode = mmfpOpen.front()->node;
 			mmfpOpen.erase(mmfpOpen.begin());
 
 			if ((currentNode->getDepth() < _maxDepth) && (Node::getNodeCount() < _maxNodes)) {
 				// Generate nodes
-				int numChildren = currentNode->generateChildren();
 				Common::Array<Node *> vChildren = currentNode->getChildren();
 
 				for (Common::Array<Node *>::iterator i = vChildren.begin(); i != vChildren.end(); i++) {
 					IContainedObject *pTemp = (*i)->getContainedObject();
 					currentT = pTemp->calcT();
 
-					if (currentT == SUCCESS) retNode = *i;
-					else mmfpOpen.insert(fnpMMap::value_type(currentT, (*i)));
+					if (currentT == SUCCESS)
+						retNode = *i;
+					else
+						mmfpOpen.insert(new TreeNode(currentT, (*i)));
 				}
 			} else {
 				retNode = currentNode;
@@ -134,7 +145,6 @@ Node *Tree::aStarSearch() {
 	}
 
 	return retNode;
-#endif
 }
 
 
@@ -146,8 +156,7 @@ Node *Tree::aStarSearch_singlePassInit() {
 	float temp = pBaseNode->getContainedObject()->calcT();
 
 	if (static_cast<int>(temp) != SUCCESS) {
-		//_currentMap.insert(fnpMMap::value_type(pBaseNode->getObjectT(), pBaseNode));
-		//assert(_currentMap.size());
+		_currentMap->insert(new TreeNode(pBaseNode->getObjectT(), pBaseNode));
 	} else {
 		retNode = pBaseNode;
 	}
@@ -157,10 +166,9 @@ Node *Tree::aStarSearch_singlePassInit() {
 
 Node *Tree::aStarSearch_singlePass(Node **currentNode) {
 	currentNode = NULL;
+	float currentT;
 	Node *retNode = NULL;
 
-#if 0
-	float currentT;
 	static int maxTime = 0;
 
 	if (currentChildIndex == 1) {
@@ -168,13 +176,13 @@ Node *Tree::aStarSearch_singlePass(Node **currentNode) {
 	}
 
 	if (currentChildIndex) {
-		if (!(_currentMap.size())) {
+		if (!(_currentMap->size())) {
 			retNode = _currentNode;
 			return retNode;
 		}
 
-		_currentNode = _currentMap.begin()->second;
-		_currentMap.erase(_currentMap.begin());
+		_currentNode = _currentMap->front()->node;
+		_currentMap->erase(_currentMap->begin());
 	}
 
 	if ((_currentNode->getDepth() < _maxDepth) && (Node::getNodeCount() < _maxNodes) && ((!maxTime) || (getTimerValue(3) < maxTime))) {
@@ -184,7 +192,7 @@ Node *Tree::aStarSearch_singlePass(Node **currentNode) {
 		if (currentChildIndex) {
 			Common::Array<Node *> vChildren = _currentNode->getChildren();
 
-			if (!vChildren.size() && !_currentMap.size()) {
+			if (!vChildren.size() && !_currentMap->size()) {
 				currentChildIndex = 0;
 				retNode = _currentNode;
 			}
@@ -197,11 +205,11 @@ Node *Tree::aStarSearch_singlePass(Node **currentNode) {
 					retNode = *i;
 					i = vChildren.end() - 1;
 				} else {
-					_currentMap.insert(fnpMMap::value_type(currentT, (*i)));
+					_currentMap->insert(new TreeNode(currentT, (*i)));
 				}
 			}
 
-			if (!(_currentMap.size()) && (currentT != SUCCESS)) {
+			if (!(_currentMap->size()) && (currentT != SUCCESS)) {
 				assert(_currentNode != NULL);
 				retNode = _currentNode;
 			}
@@ -209,7 +217,6 @@ Node *Tree::aStarSearch_singlePass(Node **currentNode) {
 	} else {
 		retNode = _currentNode;
 	}
-#endif
 
 	return retNode;
 }
diff --git a/engines/scumm/he/moonbase/ai_tree.h b/engines/scumm/he/moonbase/ai_tree.h
index 1097665..908786a 100644
--- a/engines/scumm/he/moonbase/ai_tree.h
+++ b/engines/scumm/he/moonbase/ai_tree.h
@@ -23,16 +23,21 @@
 #ifndef SCUMM_HE_MOONBASE_AI_TREE_H
 #define SCUMM_HE_MOONBASE_AI_TREE_H
 
-#include "common/hash-str.h"
+#include "common/array.h"
 #include "scumm/he/moonbase/ai_node.h"
 
 namespace Scumm {
 
-//typedef std::multimap< float, Node *, std::less<float> > fnpMMap;
-
 const int MAX_DEPTH = 100;
 const int MAX_NODES = 1000000;
 
+struct TreeNode {
+	float value;
+	Node *node;
+
+	TreeNode(float v, Node *n) { value = v; node = n; }
+};
+
 class Tree {
 private:
 	Node *pBaseNode;
@@ -42,7 +47,7 @@ private:
 
 	int currentChildIndex;
 
-	Common::StringMap _currentMap;
+	Common::SortedArray<TreeNode *> *_currentMap;
 	Node *_currentNode;
 
 public:






More information about the Scummvm-git-logs mailing list