AttributePool.hxx
Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022 #ifndef _AttributePool_hxx_
00023 #define _AttributePool_hxx_
00024
00025 #include "DescriptionAttributes.hxx"
00026
00027 namespace CLAM
00028 {
00033 class AttributePool : public Component
00034 {
00035 public:
00036 AttributePool()
00037 {
00038 _data=0;
00039 _size=0;
00040 _attribute=0;
00041 }
00042 void SetDefinition(const AbstractAttribute & attribute)
00043 {
00044 _attribute = & attribute;
00045 }
00046 const char * GetClassName() const { return "AttributePool"; }
00047 void StoreOn(Storage & storage) const
00048 {
00049 _attribute->XmlDumpData(storage, _data, _size);
00050 }
00051 void LoadFrom(Storage & storage)
00052 {
00053 _attribute->XmlRestoreData(storage, _data, _size);
00054 }
00055 void * GetData() { return _data; }
00056 const void * GetData() const { return _data; }
00057 void Allocate(unsigned size)
00058 {
00059 _data = _attribute->Allocate(size);
00060 _size=size;
00061 }
00062 void Deallocate()
00063 {
00064 if (!_data) return;
00065 _attribute->Deallocate(_data);
00066 _data = 0;
00067 }
00068 void Insert(unsigned pos)
00069 {
00070 _size++;
00071 if (_data)
00072 _attribute->Insert(_data,pos);
00073 }
00074 void Remove(unsigned pos)
00075 {
00076 _size--;
00077 if (_data)
00078 _attribute->Remove(_data,pos);
00079 }
00080 private:
00081 void * _data;
00082 const AbstractAttribute * _attribute;
00083 unsigned _size;
00084 };
00085 }
00086
00087
00088 #endif// _AttributePool_hxx_
00089