aboutsummaryrefslogtreecommitdiffstats
path: root/tests
diff options
context:
space:
mode:
authorLuciano Wolf <luciano.wolf@openbossa.org>2009-11-27 17:17:08 -0300
committerMarcelo Lira <marcelo.lira@openbossa.org>2009-11-27 19:03:31 -0300
commit5d2e5cd85ec6950f5bb848fe08e66cd8520cf29d (patch)
tree7e77367d82d4be2128b7ddd80c25476c44f74bae /tests
parent62de488a772ad9369887fcb4482df149b7c49b94 (diff)
Use map instead of list inside BlackBox class.
Now keepObjectType/keepPoint and retrieveObjectType/retrievePoint uses a ticket to get the object from a map. It's a way better than lists.
Diffstat (limited to 'tests')
-rw-r--r--tests/libsample/blackbox.cpp62
-rw-r--r--tests/libsample/blackbox.h29
-rw-r--r--tests/samplebinding/typesystem_sample.xml4
3 files changed, 52 insertions, 43 deletions
diff --git a/tests/libsample/blackbox.cpp b/tests/libsample/blackbox.cpp
index e29c76873..4cad76ad7 100644
--- a/tests/libsample/blackbox.cpp
+++ b/tests/libsample/blackbox.cpp
@@ -38,64 +38,72 @@ using namespace std;
BlackBox::~BlackBox()
{
- // Free all lists.
+ // Free all maps.
while (!m_objects.empty()) {
- delete m_objects.back();
- m_objects.pop_back();
+ delete (*m_objects.begin()).second;
+ m_objects.erase(m_objects.begin());
}
while (!m_points.empty()) {
- delete m_points.back();
- m_points.pop_back();
+ delete (*m_points.begin()).second;
+ m_points.erase(m_points.begin());
}
}
-void
+int
BlackBox::keepObjectType(ObjectType* object)
{
- m_objects.push_back(object);
+ m_ticket++;
+ std::pair<int, ObjectType*> item(m_ticket, object);
+ m_objects.insert(item);
+
+ return m_ticket;
}
ObjectType*
-BlackBox::retrieveObjectType(ObjectType* object)
+BlackBox::retrieveObjectType(int ticket)
{
- for(ObjectTypeList::iterator objecttype_iter = m_objects.begin();
- objecttype_iter != m_objects.end(); objecttype_iter++) {
- if (object == *objecttype_iter) {
- m_objects.erase(objecttype_iter);
- return object;
- }
+ map<int, ObjectType*>::iterator it = m_objects.find(ticket);
+ if (it != m_objects.end()) {
+ m_objects.erase(it);
+ return it->second;
}
return 0;
}
void
-BlackBox::disposeObjectType(ObjectType* object)
+BlackBox::disposeObjectType(int ticket)
{
-//TODO: implement + describe inside typesystem file.
+ ObjectType* object = retrieveObjectType(ticket);
+ if (object)
+ delete object;
}
-void
+int
BlackBox::keepPoint(Point* point)
{
- m_points.push_back(point);
+ m_ticket++;
+ std::pair<int, Point*> item(m_ticket, point);
+ m_points.insert(item);
+
+ return m_ticket;
}
Point*
-BlackBox::retrievePoint(Point* point)
+BlackBox::retrievePoint(int ticket)
{
- for(PointList::iterator point_iter = m_points.begin();
- point_iter != m_points.end(); point_iter++) {
- if (point == *point_iter) {
- m_points.erase(point_iter);
- return point;
- }
+ map<int, Point*>::iterator it = m_points.find(ticket);
+ if (it != m_points.end()) {
+ m_points.erase(it);
+ return it->second;
}
return 0;
}
void
-BlackBox::disposePoint(Point* point)
+BlackBox::disposePoint(int ticket)
{
-//TODO: implement + describe inside typesystem file.
+ Point* point = retrievePoint(ticket);
+ if (point)
+ delete point;
}
diff --git a/tests/libsample/blackbox.h b/tests/libsample/blackbox.h
index 136be3008..c683c82d5 100644
--- a/tests/libsample/blackbox.h
+++ b/tests/libsample/blackbox.h
@@ -36,33 +36,34 @@
#define BLACKBOX_H
#include "libsamplemacros.h"
-#include <list>
+#include <map>
#include "objecttype.h"
#include "point.h"
class LIBSAMPLE_API BlackBox
{
public:
- typedef std::list<ObjectType*> ObjectTypeList;
- typedef std::list<Point*> PointList;
+ typedef std::map<int, ObjectType*> ObjectTypeMap;
+ typedef std::map<int, Point*> PointMap;
- BlackBox() {}
+ BlackBox() { m_ticket = -1;}
~BlackBox();
- void keepObjectType(ObjectType* object);
- ObjectType* retrieveObjectType(ObjectType* object);
- void disposeObjectType(ObjectType* object);
+ int keepObjectType(ObjectType* object);
+ ObjectType* retrieveObjectType(int ticket);
+ void disposeObjectType(int ticket);
- void keepPoint(Point* point);
- Point* retrievePoint(Point* point);
- void disposePoint(Point* point);
+ int keepPoint(Point* point);
+ Point* retrievePoint(int ticket);
+ void disposePoint(int ticket);
- ObjectTypeList objects() { return m_objects; }
- PointList points() { return m_points; }
+ ObjectTypeMap objects() { return m_objects; }
+ PointMap points() { return m_points; }
private:
- ObjectTypeList m_objects;
- PointList m_points;
+ ObjectTypeMap m_objects;
+ PointMap m_points;
+ int m_ticket;
};
#endif // BLACKBOX_H
diff --git a/tests/samplebinding/typesystem_sample.xml b/tests/samplebinding/typesystem_sample.xml
index d63eb5ab9..1b0228d64 100644
--- a/tests/samplebinding/typesystem_sample.xml
+++ b/tests/samplebinding/typesystem_sample.xml
@@ -88,7 +88,7 @@
<define-ownership owner="c++"/>
</modify-argument>
</modify-function>
- <modify-function signature="retrieveObjectType(ObjectType*)">
+ <modify-function signature="retrieveObjectType(int)">
<modify-argument index="return">
<define-ownership owner="target"/>
</modify-argument>
@@ -98,7 +98,7 @@
<define-ownership owner="c++"/>
</modify-argument>
</modify-function>
- <modify-function signature="retrievePoint(Point*)">
+ <modify-function signature="retrievePoint(int)">
<modify-argument index="return">
<define-ownership owner="target"/>
</modify-argument>