From 9abb5e658d005b3ac82afeec13fd59384a8e65eb Mon Sep 17 00:00:00 2001 From: Adrian Boguszewski Date: Sun, 5 Jun 2016 23:20:55 +0200 Subject: Added object set (bzr r14954.1.1) --- src/object-set.h | 58 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 58 insertions(+) create mode 100644 src/object-set.h (limited to 'src/object-set.h') diff --git a/src/object-set.h b/src/object-set.h new file mode 100644 index 000000000..a3962356b --- /dev/null +++ b/src/object-set.h @@ -0,0 +1,58 @@ +/* + * Multiindex container for selection + * + * Authors: + * Adrian Boguszewski + * + * Copyright (C) 2016 Adrian Boguszewski + * + * Released under GNU GPL, read the file 'COPYING' for more information + */ + +#ifndef INKSCAPE_PROTOTYPE_OBJECTSET_H +#define INKSCAPE_PROTOTYPE_OBJECTSET_H + +#include "object.h" +#include +#include +#include +#include +#include +#include +#include + +struct hashed{}; + +typedef boost::multi_index_container< + Object*, + boost::multi_index::indexed_by< + boost::multi_index::sequenced<>, + boost::multi_index::hashed_unique< + boost::multi_index::tag, + boost::multi_index::identity> + >> multi_index_container; + +class ObjectSet { +public: + ObjectSet() {}; + ~ObjectSet(); + bool add(Object* object); + bool remove(Object* object); + bool contains(Object* object); + void clear(); + int size(); + +private: + void _add(Object* object); + void _remove(Object* object); + bool _anyAncestorIsInSet(Object *object); + void _removeDescendantsFromSet(Object *object); + void _removeAncestorsFromSet(Object *object); + Object *_getMutualAncestor(Object *object); + + multi_index_container container; + std::unordered_map releaseConnections; +}; + + +#endif //INKSCAPE_PROTOTYPE_OBJECTSET_H -- cgit v1.2.3