mirror of
https://github.com/enduro2d/enduro2d.git
synced 2025-12-14 16:09:06 +07:00
buffer_view to separated header file
This commit is contained in:
@@ -9,6 +9,7 @@
|
||||
#include "_utils.hpp"
|
||||
|
||||
#include "buffer.hpp"
|
||||
#include "buffer_view.hpp"
|
||||
#include "color.hpp"
|
||||
#include "color32.hpp"
|
||||
#include "filesystem.hpp"
|
||||
|
||||
@@ -86,7 +86,7 @@ namespace e2d
|
||||
};
|
||||
}
|
||||
|
||||
namespace e2d { namespace utils
|
||||
namespace e2d::utils
|
||||
{
|
||||
//
|
||||
// sdbm_hash
|
||||
@@ -159,7 +159,7 @@ namespace e2d { namespace utils
|
||||
//
|
||||
|
||||
template < typename E
|
||||
, typename = std::enable_if<std::is_enum<E>::value> >
|
||||
, typename = std::enable_if<std::is_enum_v<E>> >
|
||||
constexpr std::underlying_type_t<E> enum_to_underlying(E e) noexcept {
|
||||
return static_cast<std::underlying_type_t<E>>(e);
|
||||
}
|
||||
@@ -175,8 +175,8 @@ namespace e2d { namespace utils
|
||||
template < typename Void = void >
|
||||
class type_family_base {
|
||||
static_assert(
|
||||
std::is_void<Void>::value &&
|
||||
std::is_unsigned<type_family_id>::value,
|
||||
std::is_void_v<Void> &&
|
||||
std::is_unsigned_v<type_family_id>,
|
||||
"unexpected internal error");
|
||||
protected:
|
||||
static type_family_id last_id_;
|
||||
@@ -191,8 +191,8 @@ namespace e2d { namespace utils
|
||||
public:
|
||||
static type_family_id id() noexcept {
|
||||
static type_family_id self_id = ++last_id_;
|
||||
assert(self_id > 0u && "type_family_id overflow");
|
||||
E2D_ASSERT_MSG(self_id > 0u, "type_family_id overflow");
|
||||
return self_id;
|
||||
}
|
||||
};
|
||||
}}
|
||||
}
|
||||
|
||||
@@ -43,63 +43,8 @@ namespace e2d
|
||||
std::size_t size_ = 0;
|
||||
};
|
||||
|
||||
class buffer_view {
|
||||
public:
|
||||
buffer_view() noexcept = default;
|
||||
buffer_view(const buffer_view&) noexcept = default;
|
||||
buffer_view& operator=(const buffer_view&) noexcept = default;
|
||||
|
||||
buffer_view(std::nullptr_t) noexcept = delete;
|
||||
buffer_view(std::nullptr_t, std::size_t) noexcept = delete;
|
||||
|
||||
buffer_view(const void* data, std::size_t size) noexcept
|
||||
: data_(data)
|
||||
, size_(size){
|
||||
E2D_ASSERT(!size || data);
|
||||
}
|
||||
|
||||
buffer_view(const buffer& buffer) noexcept
|
||||
: data_(buffer.data())
|
||||
, size_(buffer.size()) {}
|
||||
|
||||
template < typename T >
|
||||
buffer_view(const vector<T>& buffer) noexcept
|
||||
: data_(buffer.data())
|
||||
, size_(buffer.size() * sizeof(T)) {}
|
||||
|
||||
template < typename T, std::size_t N >
|
||||
buffer_view(const std::array<T,N>& buffer) noexcept
|
||||
: data_(buffer.data())
|
||||
, size_(buffer.size() * sizeof(T)) {}
|
||||
|
||||
const void* data() const noexcept {
|
||||
return data_;
|
||||
}
|
||||
|
||||
std::size_t size() const noexcept {
|
||||
return size_;
|
||||
}
|
||||
|
||||
bool empty() const noexcept {
|
||||
return size_ == 0;
|
||||
}
|
||||
|
||||
void swap(buffer_view& other) noexcept {
|
||||
std::swap(data_, other.data_);
|
||||
std::swap(size_, other.size_);
|
||||
}
|
||||
private:
|
||||
const void* data_ = nullptr;
|
||||
std::size_t size_ = 0;
|
||||
};
|
||||
|
||||
void swap(buffer& l, buffer& r) noexcept;
|
||||
bool operator<(const buffer& l, const buffer& r) noexcept;
|
||||
bool operator==(const buffer& l, const buffer& r) noexcept;
|
||||
bool operator!=(const buffer& l, const buffer& r) noexcept;
|
||||
|
||||
void swap(buffer_view& l, buffer_view& r) noexcept;
|
||||
bool operator<(const buffer_view& l, const buffer_view& r) noexcept;
|
||||
bool operator==(const buffer_view& l, const buffer_view& r) noexcept;
|
||||
bool operator!=(const buffer_view& l, const buffer_view& r) noexcept;
|
||||
}
|
||||
|
||||
59
headers/enduro2d/utils/buffer_view.hpp
Normal file
59
headers/enduro2d/utils/buffer_view.hpp
Normal file
@@ -0,0 +1,59 @@
|
||||
/*******************************************************************************
|
||||
* This file is part of the "Enduro2D"
|
||||
* For conditions of distribution and use, see copyright notice in LICENSE.md
|
||||
* Copyright (C) 2018-2019, by Matvey Cherevko (blackmatov@gmail.com)
|
||||
******************************************************************************/
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "_utils.hpp"
|
||||
#include "buffer.hpp"
|
||||
|
||||
namespace e2d
|
||||
{
|
||||
class buffer_view {
|
||||
public:
|
||||
buffer_view() noexcept = default;
|
||||
|
||||
buffer_view(const buffer_view&) noexcept = default;
|
||||
buffer_view& operator=(const buffer_view&) noexcept = default;
|
||||
|
||||
buffer_view(std::nullptr_t) noexcept = delete;
|
||||
buffer_view(std::nullptr_t, std::size_t) noexcept = delete;
|
||||
|
||||
buffer_view(const buffer& buffer) noexcept;
|
||||
buffer_view(const void* data, std::size_t size) noexcept;
|
||||
|
||||
template < typename T >
|
||||
buffer_view(const vector<T>& buffer) noexcept;
|
||||
|
||||
template < typename T, std::size_t N >
|
||||
buffer_view(const std::array<T,N>& buffer) noexcept;
|
||||
|
||||
const void* data() const noexcept;
|
||||
std::size_t size() const noexcept;
|
||||
bool empty() const noexcept;
|
||||
void swap(buffer_view& other) noexcept;
|
||||
private:
|
||||
const void* data_ = nullptr;
|
||||
std::size_t size_ = 0;
|
||||
};
|
||||
|
||||
void swap(buffer_view& l, buffer_view& r) noexcept;
|
||||
bool operator<(const buffer_view& l, const buffer_view& r) noexcept;
|
||||
bool operator==(const buffer_view& l, const buffer_view& r) noexcept;
|
||||
bool operator!=(const buffer_view& l, const buffer_view& r) noexcept;
|
||||
}
|
||||
|
||||
namespace e2d
|
||||
{
|
||||
template < typename T >
|
||||
buffer_view::buffer_view(const vector<T>& buffer) noexcept
|
||||
: data_(buffer.data())
|
||||
, size_(buffer.size() * sizeof(T)) {}
|
||||
|
||||
template < typename T, std::size_t N >
|
||||
buffer_view::buffer_view(const std::array<T,N>& buffer) noexcept
|
||||
: data_(buffer.data())
|
||||
, size_(buffer.size() * sizeof(T)) {}
|
||||
}
|
||||
@@ -138,32 +138,4 @@ namespace e2d
|
||||
bool operator!=(const buffer& l, const buffer& r) noexcept {
|
||||
return !(l == r);
|
||||
}
|
||||
|
||||
void swap(buffer_view& l, buffer_view& r) noexcept {
|
||||
l.swap(r);
|
||||
}
|
||||
|
||||
bool operator<(const buffer_view& l, const buffer_view& r) noexcept {
|
||||
const void* ld = l.data();
|
||||
const void* rd = r.data();
|
||||
const std::size_t ls = l.size();
|
||||
const std::size_t rs = r.size();
|
||||
return
|
||||
(ls < rs) ||
|
||||
(ls == rs && ls > 0 && std::memcmp(ld, rd, ls) < 0);
|
||||
}
|
||||
|
||||
bool operator==(const buffer_view& l, const buffer_view& r) noexcept {
|
||||
const void* ld = l.data();
|
||||
const void* rd = r.data();
|
||||
const std::size_t ls = l.size();
|
||||
const std::size_t rs = r.size();
|
||||
return
|
||||
(ls == rs) &&
|
||||
(ls == 0 || std::memcmp(ld, rd, ls) == 0);
|
||||
}
|
||||
|
||||
bool operator!=(const buffer_view& l, const buffer_view& r) noexcept {
|
||||
return !(l == r);
|
||||
}
|
||||
}
|
||||
|
||||
68
sources/enduro2d/utils/buffer_view.cpp
Normal file
68
sources/enduro2d/utils/buffer_view.cpp
Normal file
@@ -0,0 +1,68 @@
|
||||
/*******************************************************************************
|
||||
* This file is part of the "Enduro2D"
|
||||
* For conditions of distribution and use, see copyright notice in LICENSE.md
|
||||
* Copyright (C) 2018-2019, by Matvey Cherevko (blackmatov@gmail.com)
|
||||
******************************************************************************/
|
||||
|
||||
#include <enduro2d/utils/buffer_view.hpp>
|
||||
|
||||
namespace e2d
|
||||
{
|
||||
buffer_view::buffer_view(const buffer& buffer) noexcept
|
||||
: data_(buffer.data())
|
||||
, size_(buffer.size()) {}
|
||||
|
||||
buffer_view::buffer_view(const void* data, std::size_t size) noexcept
|
||||
: data_(data)
|
||||
, size_(size){
|
||||
E2D_ASSERT(!size || data);
|
||||
}
|
||||
|
||||
const void* buffer_view::data() const noexcept {
|
||||
return data_;
|
||||
}
|
||||
|
||||
std::size_t buffer_view::size() const noexcept {
|
||||
return size_;
|
||||
}
|
||||
|
||||
bool buffer_view::empty() const noexcept {
|
||||
return size_ == 0;
|
||||
}
|
||||
|
||||
void buffer_view::swap(buffer_view& other) noexcept {
|
||||
std::swap(data_, other.data_);
|
||||
std::swap(size_, other.size_);
|
||||
}
|
||||
}
|
||||
|
||||
namespace e2d
|
||||
{
|
||||
void swap(buffer_view& l, buffer_view& r) noexcept {
|
||||
l.swap(r);
|
||||
}
|
||||
|
||||
bool operator<(const buffer_view& l, const buffer_view& r) noexcept {
|
||||
const void* ld = l.data();
|
||||
const void* rd = r.data();
|
||||
const std::size_t ls = l.size();
|
||||
const std::size_t rs = r.size();
|
||||
return
|
||||
(ls < rs) ||
|
||||
(ls == rs && ls > 0 && std::memcmp(ld, rd, ls) < 0);
|
||||
}
|
||||
|
||||
bool operator==(const buffer_view& l, const buffer_view& r) noexcept {
|
||||
const void* ld = l.data();
|
||||
const void* rd = r.data();
|
||||
const std::size_t ls = l.size();
|
||||
const std::size_t rs = r.size();
|
||||
return
|
||||
(ls == rs) &&
|
||||
(ls == 0 || std::memcmp(ld, rd, ls) == 0);
|
||||
}
|
||||
|
||||
bool operator!=(const buffer_view& l, const buffer_view& r) noexcept {
|
||||
return !(l == r);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user