diff options
author | Luciano Wolf <luciano.wolf@openbossa.org> | 2009-11-27 17:17:08 -0300 |
---|---|---|
committer | Marcelo Lira <marcelo.lira@openbossa.org> | 2009-11-27 19:03:31 -0300 |
commit | 5d2e5cd85ec6950f5bb848fe08e66cd8520cf29d (patch) | |
tree | 7e77367d82d4be2128b7ddd80c25476c44f74bae /tests | |
parent | 62de488a772ad9369887fcb4482df149b7c49b94 (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.cpp | 62 | ||||
-rw-r--r-- | tests/libsample/blackbox.h | 29 | ||||
-rw-r--r-- | tests/samplebinding/typesystem_sample.xml | 4 |
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> |