#pragma once #include /** * @brief Class for opening, casting, holding and closing records * * @tparam TRecordClass record class */ template class RecordController { public: /** * @brief Construct a new Record Controller object for record with record name * * @param record_name record name */ RecordController(const char* record_name) { name = record_name; value = static_cast(furi_record_open(name)); }; ~RecordController() { furi_record_close(name); } /** * @brief Record getter * * @return TRecordClass* record value */ TRecordClass* get() { return value; } /** * @brief Record getter (by cast) * * @return TRecordClass* record value */ operator TRecordClass*() const { return value; } private: const char* name; TRecordClass* value; };