/* * This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. * * Copyright 2015 Danny Robson */ #include "linear.hpp" #include "../../pointer.hpp" #include "../../debug.hpp" using cruft::alloc::raw::linear; /////////////////////////////////////////////////////////////////////////////// linear::linear (cruft::view _data): m_begin (_data.begin ()), m_end (_data.end ()), m_cursor (_data.begin ()) { ; } /////////////////////////////////////////////////////////////////////////////// std::byte* linear::data (void) { return m_begin; } //----------------------------------------------------------------------------- const std::byte* linear::data (void) const { return m_begin; } //----------------------------------------------------------------------------- std::byte* linear::begin (void) { return m_begin; } //----------------------------------------------------------------------------- const std::byte* linear::begin (void) const { return m_begin; } //----------------------------------------------------------------------------- std::byte* linear::end (void) { return m_end; } //----------------------------------------------------------------------------- const std::byte* linear::end (void) const { return m_end; } //----------------------------------------------------------------------------- size_t linear::offset (const void *_ptr) const { auto ptr = reinterpret_cast (_ptr); CHECK_GE (ptr, m_begin); return ptr - m_begin; } /////////////////////////////////////////////////////////////////////////////// void linear::reset (void) { m_cursor = m_begin; } /////////////////////////////////////////////////////////////////////////////// size_t linear::capacity (void) const { return m_end - m_begin; } //----------------------------------------------------------------------------- size_t linear::used (void) const { return m_cursor - m_begin; } //----------------------------------------------------------------------------- size_t linear::remain (void) const { return capacity () - used (); }