Program Listing for File table_object.h

Return to documentation for file (src/knx/table_object.h)

#pragma once

#include "interface_object.h"

class Memory;

typedef void (*BeforeTablesUnloadCallback)();

class TableObject: public InterfaceObject
{
        friend class Memory;

    public:
        TableObject(Memory& memory, uint32_t staticTableAdr = 0, uint32_t staticTableSize = 0);

        virtual ~TableObject();
        LoadState loadState();
        uint8_t* save(uint8_t* buffer) override;
        const uint8_t* restore(const uint8_t* buffer) override;
        uint16_t saveSize() override;

        static void beforeTablesUnloadCallback(BeforeTablesUnloadCallback func);
        static BeforeTablesUnloadCallback beforeTablesUnloadCallback();

    protected:
        virtual void beforeStateChange(LoadState& newState);

        uint8_t* data();
        void errorCode(ErrorCode errorCode);

        void initializeProperties(size_t propertiesSize, Property** properties) override;

        static BeforeTablesUnloadCallback _beforeTablesUnload;

        Memory& _memory;

    private:
        uint32_t tableReference();
        bool allocTable(uint32_t size, bool doFill, uint8_t fillByte);
        void allocTableStatic();
        void initializeDynTableProperties(size_t propertiesSize, Property** properties);
        void loadEvent(const uint8_t* data);
        void loadEventUnloaded(const uint8_t* data);
        void loadEventLoading(const uint8_t* data);
        void loadEventLoaded(const uint8_t* data);
        void loadEventError(const uint8_t* data);
        void additionalLoadControls(const uint8_t* data);

        void loadState(LoadState newState);
        LoadState _state = LS_UNLOADED;
        uint8_t* _data = 0;
        static uint8_t _tableUnloadCount;
        uint32_t _staticTableAdr;
        uint32_t _staticTableSize;

        uint32_t _size = 0;
};