some str_view vs buffer_view improvements

This commit is contained in:
2019-12-02 10:08:27 +07:00
parent 199768ddf5
commit be7114f4b2
7 changed files with 36 additions and 11 deletions

View File

@@ -24,6 +24,7 @@ namespace e2d
template < typename F >
decltype(auto) with_state(F&& f) const;
std::optional<script> load_script(str_view src);
std::optional<script> load_script(buffer_view src);
std::optional<script> load_script(const input_stream_uptr& src);
private:

View File

@@ -27,9 +27,6 @@ namespace e2d
template < typename T >
buffer_view(const vector<T>& buffer) noexcept;
template < typename Char >
buffer_view(const basic_string<Char>& buffer) noexcept;
template < typename T, std::size_t N >
buffer_view(const std::array<T,N>& buffer) noexcept;
@@ -60,11 +57,6 @@ namespace e2d
: data_(buffer.data())
, size_(buffer.size() * sizeof(T)) {}
template < typename Char >
buffer_view::buffer_view(const basic_string<Char>& buffer) noexcept
: data_(buffer.data())
, size_(buffer.size() * sizeof(Char)) {}
template < typename T, std::size_t N >
buffer_view::buffer_view(const std::array<T,N>& buffer) noexcept
: data_(buffer.data())

View File

@@ -76,6 +76,7 @@ namespace e2d::filesystem
bool try_read_all(str& dst, str_view path) noexcept;
bool try_read_all(buffer& dst, str_view path) noexcept;
bool try_write_all(str_view src, str_view path, bool append) noexcept;
bool try_write_all(buffer_view src, str_view path, bool append) noexcept;
ENUM_HPP_CLASS_DECL(predef_path, u8,

View File

@@ -81,6 +81,7 @@ namespace e2d
output_sequence& seek(std::ptrdiff_t offset, bool relative) noexcept;
output_sequence& write(const void* src, std::size_t size) noexcept;
output_sequence& write_all(str_view src) noexcept;
output_sequence& write_all(buffer_view src) noexcept;
output_sequence& flush() noexcept;
@@ -113,6 +114,10 @@ namespace e2d::streams
buffer& dst,
const input_stream_uptr& stream) noexcept;
bool try_write_tail(
str_view src,
const output_stream_uptr& stream) noexcept;
bool try_write_tail(
buffer_view src,
const output_stream_uptr& stream) noexcept;

View File

@@ -38,12 +38,11 @@ namespace e2d
state_.collect_garbage();
}
std::optional<script> luasol::load_script(buffer_view src) {
std::optional<script> luasol::load_script(str_view src) {
E2D_ASSERT(is_in_main_thread());
sol::load_result result = state_.load_buffer(
reinterpret_cast<const char*>(src.data()),
src.size());
src.data(), src.size());
if ( !result.valid() ) {
sol::error err = result;
@@ -56,6 +55,14 @@ namespace e2d
return script(sol::protected_function(result));
}
std::optional<script> luasol::load_script(buffer_view src) {
E2D_ASSERT(is_in_main_thread());
return load_script(str_view(
reinterpret_cast<const char*>(src.data()),
src.size()));
}
std::optional<script> luasol::load_script(const input_stream_uptr& src) {
E2D_ASSERT(is_in_main_thread());

View File

@@ -105,6 +105,11 @@ namespace e2d::filesystem
dst, make_read_file(path));
}
bool try_write_all(str_view src, str_view path, bool append) noexcept {
return streams::try_write_tail(
src, make_write_file(path, append));
}
bool try_write_all(buffer_view src, str_view path, bool append) noexcept {
return streams::try_write_tail(
src, make_write_file(path, append));

View File

@@ -170,6 +170,12 @@ namespace e2d
return *this;
}
output_sequence& output_sequence::write_all(str_view src) noexcept {
return success_
? write(src.data(), src.size())
: *this;
}
output_sequence& output_sequence::write_all(buffer_view src) noexcept {
return success_
? write(src.data(), src.size())
@@ -222,6 +228,14 @@ namespace e2d::streams
: false;
}
bool try_write_tail(str_view src, const output_stream_uptr& stream) noexcept {
return stream
? output_sequence(*stream)
.write_all(src)
.success()
: false;
}
bool try_write_tail(buffer_view src, const output_stream_uptr& stream) noexcept {
return stream
? output_sequence(*stream)