#ifndef FRAMEWORK_CONTAINER_PLACEMENTFACTORY_H_ #define FRAMEWORK_CONTAINER_PLACEMENTFACTORY_H_ #include #include class PlacementFactory { public: PlacementFactory(StorageManagerIF* backend) : dataBackend(backend) { } template T* generate(Args&&... args) { store_address_t tempId; uint8_t* pData = NULL; ReturnValue_t result = dataBackend->getFreeElement(&tempId, sizeof(T), &pData); if (result != HasReturnvaluesIF::RETURN_OK) { return NULL; } T* temp = new (pData) T(std::forward(args)...); return temp; } template ReturnValue_t destroy(T* thisElement) { //Need to call destructor first, in case something was allocated by the object (shouldn't do that, however). thisElement->~T(); uint8_t* pointer = (uint8_t*) (thisElement); return dataBackend->deleteData(pointer, sizeof(T)); } private: StorageManagerIF* dataBackend; }; #endif /* FRAMEWORK_CONTAINER_PLACEMENTFACTORY_H_ */