buffer_view to separated header file

This commit is contained in:
2019-05-28 12:25:45 +07:00
parent b1bab8a291
commit 4d6f11c998
6 changed files with 134 additions and 89 deletions

View File

@@ -9,6 +9,7 @@
#include "_utils.hpp"
#include "buffer.hpp"
#include "buffer_view.hpp"
#include "color.hpp"
#include "color32.hpp"
#include "filesystem.hpp"

View File

@@ -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;
}
};
}}
}

View File

@@ -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;
}

View 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)) {}
}

View File

@@ -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);
}
}

View 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);
}
}