#pragma once

#include <spider/runtime/reel/InstrReel.hpp>

namespace spider {

    /**
     * Implements an instruction reel.
     */
    class InstrReelFixed : public InstrReel {
    public:

        InstrReelFixed(u64 length);

        InstrReelFixed(const u8* data, u64 length);

        InstrReelFixed(const InstrReelFixed& copy);

        InstrReelFixed(InstrReelFixed&& move) noexcept;

        virtual ~InstrReelFixed();

    public:

        InstrReelFixed& operator=(const InstrReelFixed& copy);

        InstrReelFixed& operator=(InstrReelFixed&& move) noexcept;

    public:

        void at(u64 ip, u8 dat);

        void at(u64 ip, u16 dat);

        void at(u64 ip, u32 dat);

        void at(u64 ip, u64 dat);

        void resize(u64 new_size);

    };

}
