#ifndef NBTMODIFIER_NBT_PAYLOAD_IPAYLOAD_H #define NBTMODIFIER_NBT_PAYLOAD_IPAYLOAD_H #define NBTMODIFIER_NBT_PAYLOAD_IPAYLOAD_H #include class QDataStream; namespace NBT { /** * Namespace for all NBT payloads */ namespace Payload { /** * A NBT payload interface */ class IPayload { public: /** * When a payload is destroyed */ virtual inline ~IPayload () {}; /** * The NBT ID identifying the payload * * @return */ virtual quint8 const ID () const = 0; /** * Read a payload from a data stream * * @param stream The data stream */ virtual void readFromData (QDataStream &stream) = 0; /** * Write a payload to a data stream * * @param stream The data stream */ virtual void writeToData (QDataStream &stream) const = 0; /** * Convenient operator to read a payload from a data stream * * @param stream The data stream * @param payload The payload * * @return The data stream (allow call chaining) * * @see readFromData */ friend QDataStream &operator >> (QDataStream &stream, IPayload &payload); /** * Convenient operator to write a payload to a data stream * * @param stream The data stream * @param payload The payload * * @return The data stream (allow call chaining) * * @see writeToData */ friend QDataStream &operator << (QDataStream &stream, IPayload const &payload); }; } } #endif //NBTMODIFIER_NBT_PAYLOAD_IPAYLOAD_H