m/b/simple: add simple buffer implementation
This commit is contained in:
parent
1dc4b7b530
commit
37d68d5586
@ -349,6 +349,8 @@ list (
|
|||||||
matrix3.cpp
|
matrix3.cpp
|
||||||
matrix4.cpp
|
matrix4.cpp
|
||||||
matrix.hpp
|
matrix.hpp
|
||||||
|
memory/buffer/simple.cpp
|
||||||
|
memory/buffer/simple.hpp
|
||||||
memory/deleter.cpp
|
memory/deleter.cpp
|
||||||
memory/deleter.hpp
|
memory/deleter.hpp
|
||||||
nocopy.hpp
|
nocopy.hpp
|
||||||
@ -567,6 +569,7 @@ if (TESTS)
|
|||||||
maths/fast
|
maths/fast
|
||||||
matrix
|
matrix
|
||||||
memory/deleter
|
memory/deleter
|
||||||
|
memory/buffer/simple
|
||||||
parallel/queue
|
parallel/queue
|
||||||
parse
|
parse
|
||||||
point
|
point
|
||||||
|
28
memory/buffer/simple.cpp
Normal file
28
memory/buffer/simple.cpp
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
/*
|
||||||
|
* 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 2018 Danny Robson <danny@nerdcruft.net>
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "simple.hpp"
|
||||||
|
|
||||||
|
using cruft::memory::buffer::simple;
|
||||||
|
|
||||||
|
|
||||||
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
|
simple::simple (size_t _size)
|
||||||
|
: m_base (new u08[_size])
|
||||||
|
, m_size (_size)
|
||||||
|
{ ; }
|
||||||
|
|
||||||
|
|
||||||
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
|
simple::value_type* simple::begin (void)& { return m_base.get (); }
|
||||||
|
simple::value_type* simple::end (void)& { return begin () + m_size; }
|
||||||
|
|
||||||
|
|
||||||
|
//-----------------------------------------------------------------------------
|
||||||
|
simple::value_type const* simple::begin (void) const& { return m_base.get (); }
|
||||||
|
simple::value_type const* simple::end (void) const& { return begin () + m_size; }
|
54
memory/buffer/simple.hpp
Normal file
54
memory/buffer/simple.hpp
Normal file
@ -0,0 +1,54 @@
|
|||||||
|
/*
|
||||||
|
* 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 2018 Danny Robson <danny@nerdcruft.net>
|
||||||
|
*/
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include "../../std.hpp"
|
||||||
|
|
||||||
|
#include <cstddef>
|
||||||
|
#include <memory>
|
||||||
|
|
||||||
|
|
||||||
|
namespace cruft::memory::buffer {
|
||||||
|
/// Implements a trivial statically allocated memory buffer with a fixed
|
||||||
|
/// construction time and no other fancy tricks (just something trivial
|
||||||
|
/// like new/delete).
|
||||||
|
///
|
||||||
|
/// The actual allocation size is guaranteed to be _at least_ the
|
||||||
|
/// specified size. It may be larger if the underlying implementation
|
||||||
|
/// requires page alignment or other system specific details.
|
||||||
|
///
|
||||||
|
/// Useful as a trivial universal implementation of the buffer concept.
|
||||||
|
class simple {
|
||||||
|
public:
|
||||||
|
using value_type = u08;
|
||||||
|
|
||||||
|
explicit simple (size_t _size);
|
||||||
|
|
||||||
|
simple (const simple&) = delete;
|
||||||
|
simple (simple &&) = default;
|
||||||
|
simple& operator= (const simple&) = delete;
|
||||||
|
simple& operator= (simple &&);
|
||||||
|
|
||||||
|
value_type* begin (void)&;
|
||||||
|
value_type* end (void)&;
|
||||||
|
|
||||||
|
value_type const* cbegin (void)&;
|
||||||
|
value_type const* cend (void)&;
|
||||||
|
|
||||||
|
value_type const* begin (void) const&;
|
||||||
|
value_type const* end (void) const&;
|
||||||
|
|
||||||
|
std::size_t size (void) const;
|
||||||
|
std::size_t capacity (void) const;
|
||||||
|
|
||||||
|
private:
|
||||||
|
std::unique_ptr<u08> m_base;
|
||||||
|
std::size_t m_size;
|
||||||
|
};
|
||||||
|
}
|
26
test/memory/buffer/simple.cpp
Normal file
26
test/memory/buffer/simple.cpp
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
/*
|
||||||
|
* 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 2018 Danny Robson <danny@nerdcruft.net>
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "memory/buffer/simple.hpp"
|
||||||
|
|
||||||
|
#include <cstdlib>
|
||||||
|
#include <algorithm>
|
||||||
|
|
||||||
|
|
||||||
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
|
int
|
||||||
|
main (int, char**)
|
||||||
|
{
|
||||||
|
// Make a buffer and fill it with non-zero elements. This is just enough
|
||||||
|
// to test that we can write to the memory without (obviously) crashing.
|
||||||
|
static constexpr std::size_t elements = 2049;
|
||||||
|
cruft::memory::buffer::simple buf (elements);
|
||||||
|
std::fill (std::begin (buf), std::end (buf), 0xff);
|
||||||
|
|
||||||
|
return EXIT_SUCCESS;
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user