6 #include "AttributeModifier.h"
18 template<
unsigned int alignement,
typename allocatedType,
int notificationLevel>
19 class maBufferHeritage :
public CoreModifiableAttributeData<SmartPointer<AlignedCoreRawBuffer<alignement, allocatedType>>>
21 template<
int notiflevel>
23 using UnderlyingType = SmartPointer<AlignedCoreRawBuffer<alignement, allocatedType>>;
25 using BaseType = CoreModifiableAttributeData<SmartPointer<AlignedCoreRawBuffer<alignement, allocatedType>>>;
34 mValue = OwningRawPtrToSmartPtr(
new AlignedCoreRawBuffer<alignement, allocatedType>());
38 void SetBufferFromString(
const kstl::string& value)
45 kstl::string filename = value.substr(1, value.length() - 1);
47 auto ext = filename.substr(filename.find_last_of(
'.'));
55 if (uncompressManager)
57 uncompressManager->SimpleCall(
"UncompressData", loaded.get(), mValue.get());
61 KIGS_ERROR(
"trying to uncompress kxml, but KXMLManager was not declared", 1);
65 mValue->SetBuffer(std::move(*loaded.get()));
71 unsigned int readSize;
72 unsigned char* rawbuf = AsciiParserUtils::StringToBuffer(value, readSize);
73 mValue->SetBuffer(rawbuf, readSize);
83 SetBufferFromString(value);
87 virtual bool setValue(
const char* value)
override
89 kstl::string str(value);
92 virtual bool setValue(
const kstl::string& value)
override
96 SetBufferFromString(value);
97 DO_NOTIFICATION(notificationLevel);
101 virtual bool setValue(
void* value)
override
106 mValue = NonOwningRawPtrToSmartPtr((
typename CurrentAttributeType::ValueType*)((CoreRawBuffer*)value));
107 DO_NOTIFICATION(notificationLevel);
113 virtual bool getValue(kstl::string& value)
const override
118 value = AsciiParserUtils::BufferToString((
unsigned char*)mValue->buffer(), mValue->length());
125 virtual bool getValue(
void*& value)
const override { value = (CoreRawBuffer*)mValue.get();
return true; }
127 auto& operator=(
const kstl::string &value)
129 SetBufferFromString(value);
132 auto& operator=(CoreRawBuffer* value)
135 mValue->SetBuffer(*value);
139 char * buffer()
const
141 return mValue.isNil() ? nullptr : mValue->buffer();
143 unsigned int length()
const
145 return mValue.isNil() ? 0u :mValue->length();
147 void SetBuffer(
void* buffer,
unsigned int length,
bool manageMemory =
true)
150 mValue->SetBuffer(buffer, length, manageMemory);
152 operator const CoreRawBuffer*()
const {
return mValue.get(); }
154 void* getRawValue() final {
return (
void*)buffer(); }
155 size_t MemorySize() const final {
return length(); };