#pragma once

#include <CXX/Objects.hxx>

namespace Base {

class Reader;
class Writer;
class XMLReader;

class BaseClass
{
public:
    virtual ~BaseClass() = default;
    virtual PyObject* getPyObject()
    {
        return nullptr;
    }
};

class Persistence : public BaseClass
{
public:
    ~Persistence() override = default;

    virtual unsigned int getMemSize() const = 0;
    virtual void Save(Writer&) const = 0;
    virtual void Restore(XMLReader&) = 0;
    virtual void SaveDocFile(Writer&) const = 0;
    virtual void RestoreDocFile(Reader&) = 0;
};

}  // namespace Base

#define TYPESYSTEM_HEADER()
#define TYPESYSTEM_HEADER_WITH_OVERRIDE()
#define TYPESYSTEM_SOURCE(...)
#define TYPESYSTEM_SOURCE_ABSTRACT(...)
