MeVisLab Toolbox Reference
mlBaseList.h
Go to the documentation of this file.
1/*************************************************************************************
2**
3** Copyright 2007, MeVis Medical Solutions AG
4**
5** The user may use this file in accordance with the license agreement provided with
6** the Software or, alternatively, in accordance with the terms contained in a
7** written agreement between the user and MeVis Medical Solutions AG.
8**
9** For further information use the contact form at https://www.mevislab.de/contact
10**
11**************************************************************************************/
12
13#ifndef ML_BASE_LIST_H
14#define ML_BASE_LIST_H
15
16
21
22// Defines the classes:
23//
24// - BaseContainerItem: BaseItem-derived container class for Base-derived objects.
25// - BaseList : BaseListTemplate<BaseContainer*>-derived container class for
26// BaseContainer objects.
27
28
29// ML includes
30#include "mlModuleIncludes.h"
31
32
33#include "mlBaseInit.h"
34#include "mlListBase.h"
35
36
38
39
40
41// ------------------------------------------------------------------
42// Base object class BaseContainerItem
43// ------------------------------------------------------------------
44
46
53{
54public:
55
58
60
62 BaseContainerItem(MLssize_t idParam, const char* nameParam = nullptr, Base* baseP = nullptr);
63
65
67
69
71
77 virtual void setObject(Base& object);
78
82 virtual Base* getObjectPointer() const {
83 return _baseObjectP;
84 }
85
87 virtual const Base* getConstObjectPointer() const {
88 return const_cast<const Base*>(_baseObjectP);
89 }
90
95
99 static BaseContainerItem* toBaseContainerItem(Base& baseObj, MLssize_t id = 0, const char* name = nullptr);
100
105
112
116 std::string persistentState() const override;
117
119 void setPersistentState(const std::string& state) override;
120
122 void addStateToTree(TreeNode* parent) const override;
123
126
128 void readStateFromTree(TreeNode* parent) override;
129
131
132protected:
133
141
144
149
156
157private:
158
161
162};
163
164
165// ------------------------------------------------------------------
167// ------------------------------------------------------------------
169public:
171 virtual bool isLessThan(const Base& /*x*/, const Base& /*y*/) = 0;
173 virtual ~BaseListSortParameters(){ } /* Make destructor virtual to avoid warnings on GCC */
174};
175
176
177
178
179// ------------------------------------------------------------------
180// Class BaseList
181// ------------------------------------------------------------------
182
184class MLBASEEXPORT BaseList : public BaseListTemplate<BaseContainerItem>
185{
186
187public:
188
191
193
195 BaseList* deepCopy() const override;
196
197private:
198
201
202};
203
205
206namespace std {
207
208
210 template<>
211 struct less<ML_NAMESPACE::BaseContainerItem>
212 {
214
215 less(ML_NAMESPACE::BaseListSortParameters* sortParams) {
216 _sortParams = sortParams;
217 }
218
220 bool operator()(const ML_NAMESPACE::BaseContainerItem &x, const ML_NAMESPACE::BaseContainerItem &y) const
221 {
222 // An item containing an object defined to be less than an item without one:
223 if (!x.getConstObjectPointer()) { return false; }
224 if (!y.getConstObjectPointer()) { return true; }
225
226 if (!_sortParams) { return false; }
227
229 return _sortParams->isLessThan(*x.getConstObjectPointer(), *y.getConstObjectPointer());
230 };
231
233 ML_NAMESPACE::BaseListSortParameters* _sortParams;
234
235 };
236
237}
238
239
240
241#endif // MLBASELIST_H
Base object class BaseContainerItem encapsulates a pointer to a Base object as a list item.
Definition mlBaseList.h:53
void _setObjectPointer(Base *objectP, bool isOwner=true)
Sets a new object by pointer.
BaseContainerItem & operator=(const BaseContainerItem &other)
Assignment operator, performing a shallow copy as far as the contained base object is concerned.
bool _ownsBaseObject
Flag remembering if the contained base object is owned.
Definition mlBaseList.h:148
~BaseContainerItem() override
static BaseContainerItem * toBaseContainerItem(Base &baseObj, MLssize_t id=0, const char *name=nullptr)
Returns baseObj, if baseObj already is a BaseContainerItem.
void setPersistentState(const std::string &state) override
Initialize the item object from the string state.
bool _baseObjectIsRefCounted
Flag remembering if the contained base object is ref-counted This flag is not strictly necessary,...
Definition mlBaseList.h:155
virtual Base * getObjectPointer() const
Returns a pointer to the contained base object.
Definition mlBaseList.h:82
virtual Base * removeObjectPointer()
Removes the contained object (deletes if owned and not ref-counted).
void readStateFromTree(TreeNode *parent) override
Reads the object state from the children of the given parent node.
void addStateToTree(TreeNode *parent) const override
Attaches the object state as children of the given parent node.
Base * _baseObjectP
Pointer to the actual object:
Definition mlBaseList.h:143
ML_SET_ADDSTATE_VERSION(0)
Set addState version number.
virtual const Base * getConstObjectPointer() const
Returns a const pointer to the contained base object.
Definition mlBaseList.h:87
BaseContainerItem(MLssize_t idParam, const char *nameParam=nullptr, Base *baseP=nullptr)
When assigning a base object, you should also provide a name.
BaseContainerItem(const BaseContainerItem &other, bool useDeepCopy=false)
BaseContainerItem(BaseContainerItem &&other) noexcept
virtual void setObject(Base &object)
Sets a new object.
virtual BaseContainerItem & copyFrom(const BaseContainerItem &other, bool performDeepCopy=true)
Copies from other BaseContainerItem.
std::string persistentState() const override
Returns a string describing the object's internal state.
General Base object class for list items that have an id and a name.
Definition mlBaseItem.h:38
Class that is designed to hold custom list sorting parameters (such as sort mode)
Definition mlBaseList.h:168
virtual bool isLessThan(const Base &, const Base &)=0
Pure virtual comparison function.
virtual ~BaseListSortParameters()
virtual destructor
Definition mlBaseList.h:173
Base object template list class for list item classes derived from BaseItem.
Definition mlListBase.h:654
Base object class BaseList which stores a list of BaseContainerItem entries.
Definition mlBaseList.h:185
BaseList(const BaseList &other)
Definition mlBaseList.h:192
BaseList()
Constructor, enables persistence.
Definition mlBaseList.h:190
BaseList * deepCopy() const override
Create a deep copy of the list.
Class representing general ML objects that support import/export via strings (setPersistentState() an...
Definition mlBase.h:59
The class TreeNode is the abstract base class for the import/export of ML objects.
Definition mlTreeNode.h:154
#define MLBASEEXPORT
defined Header file mlBaseInit.h
Definition mlBaseInit.h:22
Target mlrange_cast(Source arg)
Generic version of checked ML casts.
#define ML_CLASS_HEADER(className)
Same like ML_CLASS_HEADER_EXPORTED with a non existing export symbol.
SSIZE_T MLssize_t
The signed ML size type which is a signed 32 bit size_t on 32 bit platforms and 64 bit one on 64 bit ...
Definition mlTypeDefs.h:566
STL namespace.
bool operator()(const ml::BaseContainerItem &x, const ml::BaseContainerItem &y) const
comparison operator
Definition mlBaseList.h:220
ml::BaseListSortParameters * _sortParams
sort mode
Definition mlBaseList.h:233
less(ml::BaseListSortParameters *sortParams)
Definition mlBaseList.h:215