Compare commits

..

No commits in common. "master" and "master" have entirely different histories.

18 changed files with 67 additions and 1586 deletions

View File

@ -1,7 +1,14 @@
Copyright (c) 2015-2020 Daniel "q66" Kolesa
Libostd is licensed under the University of Illinois/NCSA Open Source License,
a permissive, non-copyleft, BSD style license. The license text goes as follows:
Redistribution and use in source and binary forms, with or without modification,
are permitted provided that the following conditions are met:
Copyright (c) 2015 Daniel "q66" Kolesa. All rights reserved.
Permission is hereby granted, free of charge, to any person obtaining a copy of
this software and associated documentation files (the "Software"), to deal with
the Software without restriction, including without limitation the rights to
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
of the Software, and to permit persons to whom the Software is furnished to do
so, subject to the following conditions:
* Redistributions of source code must retain the above copyright notice,
this list of conditions and the following disclaimers.
@ -10,17 +17,17 @@ are permitted provided that the following conditions are met:
this list of conditions and the following disclaimers in the
documentation and/or other materials provided with the distribution.
**THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
THE POSSIBILITY OF SUCH DAMAGE.**
* Neither the names of libostd developers nor any contributors may be
used to endorse or promote products derived from this Software without
specific prior written permission.
**THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
CONTRIBUTORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS WITH THE
SOFTWARE.**
Additionally some code from the libc++ project has been used as a reference;
libc++ is a part of the LLVM project.
@ -34,7 +41,7 @@ to the project here.
Additional thanks to Dale Weiler aka graphitemaster (reference code in the
Neothyne project) and cppreference.com.
**The data/UnicodeData-13.0.txt file is taken from the Unicode Character
**The data/UnicodeData-11.0.txt file is taken from the Unicode Character
Database and provided under the following license:**
COPYRIGHT AND PERMISSION NOTICE

File diff suppressed because it is too large Load Diff

View File

@ -1,6 +1,6 @@
project('libostd', ['cpp'],
version: '0.1.0',
default_options: ['buildtype=plain', 'cpp_std=c++17', 'warning_level=3'],
default_options: ['buildtype=plain', 'cpp_std=c++17'],
meson_version: '>=0.46'
)
@ -11,25 +11,15 @@ dir_lib = join_paths(dir_prefix, get_option('libdir'))
dir_package_include = join_paths(dir_include, 'ostd')
unicode_data = join_paths('data', 'UnicodeData-13.0.txt')
unicode_data = join_paths('data', 'UnicodeData-11.0.txt')
libostd_includes = [include_directories('.')]
cxx = meson.get_compiler('cpp')
extra_cxxflags = []
if get_option('buildtype') != 'plain'
if cxx.has_argument('-Wshadow')
extra_cxxflags += '-Wshadow'
endif
if cxx.has_argument('-Wold-style-cast')
extra_cxxflags += '-Wold-style-cast'
endif
endif
if cxx.has_argument('-fvisibility=hidden')
extra_cxxflags += '-fvisibility=hidden'
tgt_compiler_id = meson.get_compiler('cpp').get_id()
if tgt_compiler_id == 'gcc' or tgt_compiler_id == 'clang'
extra_cxxflags = ['-Wextra', '-Wshadow', '-Wold-style-cast']
else
extra_cxxflags = []
endif
subdir('src')

View File

@ -488,7 +488,7 @@ inline UnaryFunction for_each(InputRange range, UnaryFunction func) {
for (; !range.empty(); range.pop_front()) {
func(range.front());
}
return func;
return std::move(func);
}
/** @brief A pipeable version of ostd::for_each().

View File

@ -41,7 +41,7 @@ namespace ostd {
*/
/** @brief The error thrown on parsing and other failures. */
struct OSTD_EXPORT arg_error: std::runtime_error {
struct arg_error: std::runtime_error {
using std::runtime_error::runtime_error;
/* empty, for vtable placement */
@ -98,7 +98,7 @@ enum class arg_value {
*
* This base class is abstract so it cannot be instantiated.
*/
struct OSTD_EXPORT arg_description {
struct arg_description {
friend struct arg_description_container;
friend struct arg_mutually_exclusive_group;
friend struct arg_group;
@ -138,7 +138,7 @@ protected:
*
* It's not instantiated directly.
*/
struct OSTD_EXPORT arg_argument: arg_description {
struct arg_argument: arg_description {
/* empty, for vtable placement */
virtual ~arg_argument();
@ -225,7 +225,7 @@ private:
*
*See ostd::basic_arg_parser for more.
*/
struct OSTD_EXPORT arg_optional: arg_argument {
struct arg_optional: arg_argument {
template<typename HelpFormatter>
friend struct basic_arg_parser;
friend struct arg_description_container;
@ -459,7 +459,7 @@ private:
*
*See ostd::basic_arg_parser for more.
*/
struct OSTD_EXPORT arg_positional: arg_argument {
struct arg_positional: arg_argument {
template<typename HelpFormatter>
friend struct basic_arg_parser;
friend struct arg_description_container;
@ -603,7 +603,7 @@ private:
* A mutually exclusive group can also have the `required` flag set
* in which case one of the arguments must always be used.
*/
struct OSTD_EXPORT arg_mutually_exclusive_group: arg_description {
struct arg_mutually_exclusive_group: arg_description {
friend struct arg_description_container;
/* empty, for vtable placement */
@ -940,7 +940,7 @@ protected:
* A group is named and can optionally have a title. The title is
* displayed in help listing. If not set, the name is displayed.
*/
struct OSTD_EXPORT arg_group: arg_description, arg_description_container {
struct arg_group: arg_description, arg_description_container {
friend struct arg_description_container;
/* empty, for vtable placement */

View File

@ -198,7 +198,7 @@ private:
bool p_action = false;
};
struct OSTD_EXPORT make_task {
struct make_task {
make_task() {}
virtual ~make_task();

View File

@ -24,7 +24,6 @@
#include <stdexcept>
#include <memory>
#include <ostd/platform.hh>
#include <ostd/generic_condvar.hh>
namespace ostd {
@ -34,7 +33,7 @@ namespace ostd {
*/
/** @brief Thrown when manipulating a channel that has been closed. */
struct OSTD_EXPORT channel_error: std::logic_error {
struct channel_error: std::logic_error {
using std::logic_error::logic_error;
/* empty, for vtable placement */
virtual ~channel_error();

View File

@ -212,7 +212,7 @@ private:
* The `start` method will also set the internal current scheduler pointer
* so that APIs such as ostd::spawn() can work.
*/
struct OSTD_EXPORT scheduler {
struct scheduler {
private:
struct stack_allocator {
stack_allocator() = delete;
@ -544,7 +544,7 @@ namespace detail {
OSTD_EXPORT extern thread_local csched_task *current_csched_task;
struct OSTD_EXPORT csched_task: coroutine_context {
struct csched_task: coroutine_context {
friend struct coroutine_context;
csched_task() = delete;

View File

@ -54,14 +54,14 @@ namespace ostd {
*
* These can include a dead coroutine/generator call/access.
*/
struct OSTD_EXPORT coroutine_error: std::runtime_error {
struct coroutine_error: std::runtime_error {
using std::runtime_error::runtime_error;
/* empty, for vtable placement */
virtual ~coroutine_error();
};
namespace detail {
struct OSTD_EXPORT stack_free_iface {
struct stack_free_iface {
stack_free_iface() {}
/* empty, for vtable placement */
virtual ~stack_free_iface();
@ -84,7 +84,7 @@ namespace detail {
* managing the coroutine as well as its entry point. All coroutine types
* inherit from this.
*/
struct OSTD_EXPORT coroutine_context {
struct coroutine_context {
/** @brief Gets the currently executing coroutine context.
*
* Sometimes custom coroutine types might want to bypass being able

View File

@ -55,7 +55,7 @@ enum format_flags {
};
/** @brief Thrown when format string does not properly match the arguments. */
struct OSTD_EXPORT format_error: std::runtime_error {
struct format_error: std::runtime_error {
using std::runtime_error::runtime_error;
/* empty, for vtable placement */
virtual ~format_error();

View File

@ -16,8 +16,6 @@
#include <algorithm>
#include <condition_variable>
#include <ostd/platform.hh>
namespace ostd {
/** @addtogroup Concurrency
@ -25,7 +23,7 @@ namespace ostd {
*/
namespace detail {
struct OSTD_EXPORT cond_iface {
struct cond_iface {
cond_iface() {}
virtual ~cond_iface();
virtual void notify_one() = 0;

View File

@ -90,7 +90,7 @@ namespace detail {
*
* It inherits from std::runtime_error and has the same methods and behavior.
*/
struct OSTD_EXPORT path_error: std::runtime_error {
struct path_error: std::runtime_error {
using std::runtime_error::runtime_error;
/* empty, for vtable placement */
@ -1263,7 +1263,7 @@ using file_time_t = std::chrono::time_point<std::chrono::system_clock>;
* up to two paths involved in the operation as ostd::path. Whether those
* are used depends on the operation.
*/
struct OSTD_EXPORT fs_error: std::system_error {
struct fs_error: std::system_error {
/** @brief Constructs the error without paths. */
fs_error(std::string const &warg, std::error_code ec):
std::system_error::system_error(ec, warg)

View File

@ -32,7 +32,7 @@ namespace ostd {
*/
/** @brief Thrown on errors in ostd::split_args(). */
struct OSTD_EXPORT word_error: std::runtime_error {
struct word_error: std::runtime_error {
using std::runtime_error::runtime_error;
/* empty, for vtable placement */
virtual ~word_error();
@ -81,7 +81,7 @@ Sink &&split_args(Sink &&out, string_range str) {
}
/** @brief Thrown on errors in ostd::subprocess. */
struct OSTD_EXPORT subprocess_error: std::runtime_error {
struct subprocess_error: std::runtime_error {
using std::runtime_error::runtime_error;
/* empty, for vtable placement */
virtual ~subprocess_error();

View File

@ -88,7 +88,7 @@ template<typename T = char, bool = std::is_trivial_v<T>>
struct stream_range;
/** @brief Thrown on stream errors. */
struct OSTD_EXPORT stream_error: std::system_error {
struct stream_error: std::system_error {
using std::system_error::system_error;
/* empty, for vtable placement */
virtual ~stream_error();
@ -102,7 +102,7 @@ struct stream_line_range;
* All streams derive from this, for example ostd::file_steram.
* They implement the virtual interface provided by this class.
*/
struct OSTD_EXPORT stream {
struct stream {
/** @brief The stream offset type. */
using offset_type = stream_off_t;

View File

@ -126,14 +126,6 @@ public:
p_beg(v.p_beg), p_end(v.p_end)
{}
/** @brief Slices can be constructed from string views. */
template<typename U>
basic_char_range(std::basic_string_view<
std::remove_const_t<value_type>, U
> const &v) noexcept:
p_beg{v.data()}, p_end{v.data() + v.size()}
{}
/** @brief Constructs a slice from a pointer or a static array.
*
* This constructor handles two cases. The input must be convertible
@ -798,7 +790,7 @@ namespace utf {
static inline constexpr char32_t const max_unicode = 0x10FFFF;
/** @brief Thrown on UTF-8 decoding failure. */
struct OSTD_EXPORT utf_error: std::runtime_error {
struct utf_error: std::runtime_error {
using std::runtime_error::runtime_error;
/* empty, for vtable placement */
virtual ~utf_error();

View File

@ -9,7 +9,7 @@ namespace ostd {
namespace build {
/* place the vtable in here */
OSTD_EXPORT make_task::~make_task() {}
make_task::~make_task() {}
static bool check_exec(
string_range tname, std::vector<string_range> const &deps

View File

@ -49,7 +49,7 @@ thread_dep = dependency('threads')
libostd_gen_unicode_exe = executable('gen_unicode',
['../gen_unicode.cc'],
include_directories: libostd_includes,
cpp_args: ['-DOSTD_GEN_UNICODE_BUILD'] + extra_cxxflags,
cpp_args: extra_cxxflags + ['-DOSTD_GEN_UNICODE_BUILD'],
install: false,
native: true
)

View File

@ -21,7 +21,7 @@ namespace ostd {
/* place the vtables in here */
OSTD_EXPORT path_error::~path_error() {}
path_error::~path_error() {}
namespace fs {
fs_error::~fs_error() {}