00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017 #ifndef __itkImportImageContainer_h
00018 #define __itkImportImageContainer_h
00019
00020 #include "itkObject.h"
00021 #include "itkObjectFactory.h"
00022 #include <utility>
00023
00024 namespace itk
00025 {
00026
00044 template <typename TElementIdentifier, typename TElement>
00045 class ImportImageContainer: public Object
00046 {
00047 public:
00049 typedef ImportImageContainer Self;
00050 typedef Object Superclass;
00051 typedef SmartPointer<Self> Pointer;
00052 typedef SmartPointer<const Self> ConstPointer;
00053
00055 typedef TElementIdentifier ElementIdentifier;
00056 typedef TElement Element;
00057
00059 itkNewMacro(Self);
00060
00062 itkTypeMacro(ImportImageContainer, Object);
00063
00065 TElement *GetImportPointer() {return m_ImportPointer;};
00066
00073 void SetImportPointer(TElement *ptr, TElementIdentifier num,
00074 bool LetContainerManageMemory = false);
00075
00077 TElement & operator[](const ElementIdentifier id)
00078 { return m_ImportPointer[id]; }
00079
00081 const TElement & operator[](const ElementIdentifier id) const
00082 { return m_ImportPointer[id]; }
00083
00086 TElement *GetBufferPointer()
00087 { return m_ImportPointer; }
00088
00090 unsigned long Capacity(void) const
00091 { return (unsigned long) m_Capacity; }
00092
00094 unsigned long Size(void) const
00095 { return (unsigned long) m_Size; }
00096
00109 void Reserve(ElementIdentifier num);
00110
00117 void Squeeze(void);
00118
00120 void Initialize(void);
00121
00122
00132 itkSetMacro(ContainerManageMemory,bool);
00133 itkGetConstMacro(ContainerManageMemory,bool);
00134 itkBooleanMacro(ContainerManageMemory);
00136
00137
00138 protected:
00139 ImportImageContainer();
00140 virtual ~ImportImageContainer();
00141
00145 void PrintSelf(std::ostream& os, Indent indent) const;
00146
00147 virtual TElement* AllocateElements(ElementIdentifier size) const;
00148 virtual void DeallocateManagedMemory();
00149
00150
00151
00152
00153
00154
00155
00156 itkSetMacro(Size,TElementIdentifier);
00157
00158
00159
00160
00161
00162
00163
00164 itkSetMacro(Capacity,TElementIdentifier);
00165
00166
00167
00168
00169
00170
00171 void SetImportPointer(TElement *ptr){m_ImportPointer=ptr;}
00172
00173 private:
00174 ImportImageContainer(const Self&);
00175 void operator=(const Self&);
00176
00177 TElement *m_ImportPointer;
00178 TElementIdentifier m_Size;
00179 TElementIdentifier m_Capacity;
00180 bool m_ContainerManageMemory;
00181 };
00182
00183 }
00184
00185
00186 #define ITK_TEMPLATE_ImportImageContainer(_, EXPORT, x, y) namespace itk { \
00187 _(2(class EXPORT ImportImageContainer< ITK_TEMPLATE_2 x >)) \
00188 namespace Templates { typedef ImportImageContainer< ITK_TEMPLATE_2 x > ImportImageContainer##y; } \
00189 }
00190
00191 #if ITK_TEMPLATE_EXPLICIT
00192 # include "Templates/itkImportImageContainer+-.h"
00193 #endif
00194
00195 #if ITK_TEMPLATE_TXX
00196 # include "itkImportImageContainer.txx"
00197 #endif
00198
00199 #endif
00200