[Scummvm-cvs-logs] SF.net SVN: scummvm:[39613] scummvm/trunk/engines/sci/engine/kpathing.cpp
fingolfin at users.sourceforge.net
fingolfin at users.sourceforge.net
Sun Mar 22 19:27:39 CET 2009
Revision: 39613
http://scummvm.svn.sourceforge.net/scummvm/?rev=39613&view=rev
Author: fingolfin
Date: 2009-03-22 18:27:39 +0000 (Sun, 22 Mar 2009)
Log Message:
-----------
SCI: Renamed Vertex::entries::cle_next -> Vertex::_next, analog for cle_prev. Replace code for reversing a circular list by a new method CircularVertexList::reverse()
Modified Paths:
--------------
scummvm/trunk/engines/sci/engine/kpathing.cpp
Modified: scummvm/trunk/engines/sci/engine/kpathing.cpp
===================================================================
--- scummvm/trunk/engines/sci/engine/kpathing.cpp 2009-03-22 18:27:08 UTC (rev 39612)
+++ scummvm/trunk/engines/sci/engine/kpathing.cpp 2009-03-22 18:27:39 UTC (rev 39613)
@@ -108,10 +108,8 @@
int idx;
// Vertex circular list entry
- struct {
- Vertex *cle_next; // next element
- Vertex *cle_prev; // previous element
- } entries;
+ Vertex *_next; // next element
+ Vertex *_prev; // previous element
// Distance from starting vertex
float dist;
@@ -142,37 +140,51 @@
void insertHead(Vertex *elm) {
if (_head == NULL) {
- elm->entries.cle_next = elm->entries.cle_prev = elm;
+ elm->_next = elm->_prev = elm;
} else {
- elm->entries.cle_next = _head;
- elm->entries.cle_prev = _head->entries.cle_prev;
- _head->entries.cle_prev = elm;
- elm->entries.cle_prev->entries.cle_next = elm;
+ elm->_next = _head;
+ elm->_prev = _head->_prev;
+ _head->_prev = elm;
+ elm->_prev->_next = elm;
}
_head = elm;
}
static void insertAfter(Vertex *listelm, Vertex *elm) {
- elm->entries.cle_prev = listelm;
- (elm)->entries.cle_next = listelm->entries.cle_next;
- listelm->entries.cle_next->entries.cle_prev = elm;
- listelm->entries.cle_next = elm;
+ elm->_prev = listelm;
+ elm->_next = listelm->_next;
+ listelm->_next->_prev = elm;
+ listelm->_next = elm;
}
void remove(Vertex *elm) {
- if (elm->entries.cle_next == elm) {
+ if (elm->_next == elm) {
_head = NULL;
} else {
if (_head == elm)
- _head = elm->entries.cle_next;
- elm->entries.cle_prev->entries.cle_next = elm->entries.cle_next;
- elm->entries.cle_next->entries.cle_prev = elm->entries.cle_prev;
+ _head = elm->_next;
+ elm->_prev->_next = elm->_next;
+ elm->_next->_prev = elm->_prev;
}
}
bool empty() const {
return _head == NULL;
}
+
+ /**
+ * Reverse the order of the elements in this circular list.
+ */
+ void reverse() {
+ if (!_head)
+ return;
+
+ Vertex *elm = _head;
+ do {
+ SWAP(elm->_prev, elm->_next);
+ elm = elm->_next;
+ } while (elm != _head);
+ }
};
/* Circular list definitions. */
@@ -180,12 +192,12 @@
#define CLIST_FOREACH(var, head) \
for ((var) = (head)->first(); \
(var); \
- (var) = ((var)->entries.cle_next == (head)->first() ? \
- NULL : (var)->entries.cle_next))
+ (var) = ((var)->_next == (head)->first() ? \
+ NULL : (var)->_next))
/* Circular list access methods. */
-#define CLIST_NEXT(elm) ((elm)->entries.cle_next)
-#define CLIST_PREV(elm) ((elm)->entries.cle_prev)
+#define CLIST_NEXT(elm) ((elm)->_next)
+#define CLIST_PREV(elm) ((elm)->_prev)
struct Polygon {
@@ -580,17 +592,7 @@
if (((area > 0) && (polygon->type == POLY_CONTAINED_ACCESS))
|| ((area < 0) && (polygon->type != POLY_CONTAINED_ACCESS))) {
- // Create a new circular list
- CircularVertexList vertices;
-
- while (!polygon->vertices.empty()) {
- // Put first vertex in new list
- Vertex *vertex = polygon->vertices.first();
- polygon->vertices.remove(vertex);
- vertices.insertHead(vertex);
- }
-
- polygon->vertices = vertices;
+ polygon->vertices.reverse();
}
}
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
More information about the Scummvm-git-logs
mailing list