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 
37 ML_START_NAMESPACE
38 
39 
40 
41 // ------------------------------------------------------------------
42 // Base object class BaseContainerItem
43 // ------------------------------------------------------------------
44 
46 
53 {
54 public:
55 
58 
60 
62  BaseContainerItem(MLssize_t idParam, const char* nameParam = nullptr, Base* baseP = nullptr);
63 
64  BaseContainerItem(const BaseContainerItem &other, bool useDeepCopy = false);
65 
67 
68  ~BaseContainerItem() override;
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 
111  virtual BaseContainerItem& copyFrom(const BaseContainerItem& other, bool performDeepCopy = true);
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 
132 protected:
133 
140  void _setObjectPointer(Base* objectP, bool isOwner = true);
141 
144 
149 
156 
157 private:
158 
161 
162 };
163 
164 
165 // ------------------------------------------------------------------
167 // ------------------------------------------------------------------
169 public:
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 
184 class MLBASEEXPORT BaseList : public BaseListTemplate<BaseContainerItem>
185 {
186 
187 public:
188 
191 
193 
195  BaseList* deepCopy() const override;
196 
197 private:
198 
201 
202 };
203 
204 ML_END_NAMESPACE
205 
206 namespace std {
207 
208 
210  template<>
211  struct less<ML_NAMESPACE::BaseContainerItem>
212  {
213  using value_type = bool;
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.
virtual Base * removeObjectPointer()
Removes the contained object (deletes if owned and not ref-counted).
bool _ownsBaseObject
Flag remembering if the contained base object is owned.
Definition: mlBaseList.h:148
virtual BaseContainerItem & copyFrom(const BaseContainerItem &other, bool performDeepCopy=true)
Copies from other BaseContainerItem.
~BaseContainerItem() override
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
static BaseContainerItem * toBaseContainerItem(Base &baseObj, MLssize_t id=0, const char *name=nullptr)
Returns baseObj, if baseObj already is a BaseContainerItem.
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.
virtual const Base * getConstObjectPointer() const
Returns a const pointer to the contained base object.
Definition: mlBaseList.h:87
Base * _baseObjectP
Pointer to the actual object:
Definition: mlBaseList.h:143
virtual Base * getObjectPointer() const
Returns a pointer to the contained base object.
Definition: mlBaseList.h:82
ML_SET_ADDSTATE_VERSION(0)
Set addState version number.
BaseContainerItem & operator=(const BaseContainerItem &other)
Assignment operator, performing a shallow copy as far as the contained base object is concerned.
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.
std::string persistentState() const override
Return a string representation of the item object.
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
#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 that is a signed 32-bit size_t on 32-bit platforms and 64-bit one on 64-bit p...
Definition: mlTypeDefs.h:566
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:230
less(ml::BaseListSortParameters *sortParams)
Definition: mlBaseList.h:215