// Copyright 2023 xensik. All rights reserved.
//
// Use of this source code is governed by a GNU GPLv3 license
// that can be found in the LICENSE file.

#include "stdinc.hpp"
#include "lookahead.hpp"

namespace xsk::gsc
{

lookahead::lookahead(char const* data, usize size) : buffer_pos{ 0 }, available{ 0 }, last_byte{ 0 }, curr_byte{ 0 }
{
    if (data && size)
    {
        buffer_pos = data;
        available = size;
        last_byte = 0;
        curr_byte = *data;
    }
}

auto lookahead::advance() -> void
{
    ++buffer_pos;

    if (available-- == 1)
    {
        available = 0;
        last_byte = curr_byte;
        curr_byte = 0;
    }
    else
    {
        last_byte = curr_byte;
        curr_byte = *buffer_pos;
    }
}

} // namespace xsk::gsc
