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 Size(void) const
00091 { return (unsigned long) m_Size; };
00092
00101 void Reserve(ElementIdentifier num);
00102
00109 void Squeeze(void);
00110
00112 void Initialize(void);
00113
00114
00124 itkSetMacro(ContainerManageMemory,bool);
00125 itkGetMacro(ContainerManageMemory,bool);
00126 itkBooleanMacro(ContainerManageMemory);
00128
00129
00130 protected:
00131 ImportImageContainer();
00132 virtual ~ImportImageContainer();
00133
00137 void PrintSelf(std::ostream& os, Indent indent) const;
00138
00139 TElement* AllocateElements(ElementIdentifier size) const;
00140 private:
00141 ImportImageContainer(const Self&);
00142 void operator=(const Self&);
00143
00144 TElement *m_ImportPointer;
00145 TElementIdentifier m_Size;
00146 TElementIdentifier m_Capacity;
00147 bool m_ContainerManageMemory;
00148
00149 };
00150
00151 }
00152
00153
00154 #define ITK_TEMPLATE_ImportImageContainer(_, EXPORT, x, y) namespace itk { \
00155 _(2(class EXPORT ImportImageContainer< ITK_TEMPLATE_2 x >)) \
00156 namespace Templates { typedef ImportImageContainer< ITK_TEMPLATE_2 x > ImportImageContainer##y; } \
00157 }
00158
00159 #if ITK_TEMPLATE_EXPLICIT
00160 # include "Templates/itkImportImageContainer+-.h"
00161 #endif
00162
00163 #if ITK_TEMPLATE_TXX
00164 # include "itkImportImageContainer.txx"
00165 #endif
00166
00167 #endif
00168