X-Git-Url: http://xvm.mit.edu/gitweb/invirt/third/libt4.git/blobdiff_plain/8b9d106fcc61fc84712c97d4db060d8302cc63fd..f0dcb6b97d6d40f67698d1f71ac26970f1776f82:/types.h diff --git a/types.h b/types.h index d2d5411..888cd68 100644 --- a/types.h +++ b/types.h @@ -5,37 +5,40 @@ #include using std::copy; -using std::move; +using std::count_if; +using std::find; using std::max; using std::min; using std::min_element; -using std::find; -using std::count_if; +using std::move; +using std::swap; + +#include +using cond = std::condition_variable; +using std::cv_status; #include -using std::chrono::seconds; -using std::chrono::milliseconds; +using std::chrono::duration_cast; using std::chrono::microseconds; +using std::chrono::milliseconds; using std::chrono::nanoseconds; +using std::chrono::seconds; using std::chrono::steady_clock; using std::chrono::system_clock; -using std::chrono::duration_cast; -using std::chrono::time_point_cast; using std::chrono::time_point; +using std::chrono::time_point_cast; #include using std::exception; #include -using std::ofstream; using std::ifstream; +using std::ofstream; -#ifndef LIBT4_NO_FUNCTIONAL #include +// std::bind conflicts with BIND(2) using std::function; -using std::bind; using std::placeholders::_1; -#endif #include #include @@ -66,12 +69,11 @@ using std::enable_shared_from_this; using std::make_shared; using std::shared_ptr; using std::unique_ptr; +using std::weak_ptr; #include using std::mutex; using lock = std::unique_lock; -using cond = std::condition_variable; -using std::cv_status; #include using std::ostringstream; @@ -120,13 +122,13 @@ using std::vector; template struct is_const_iterable : false_type {}; template struct is_const_iterable().cbegin(), declval().cend(), void()) + decltype(declval().cbegin(), declval().cend(), void()) > : true_type {}; template struct supports_emplace_back : false_type {}; template struct supports_emplace_back().emplace_back(declval()), void()) + decltype(declval().emplace_back(declval()), void()) > : true_type {}; template @@ -149,7 +151,7 @@ implode(const C & v, string delim=" ") { return oss.str(); } -inline vector explode(const string &s, string delim=" ") { +inline vector explode(const string & s, string delim=" ") { vector out; size_t start = 0, end = 0; while ((end = s.find(delim, start)) != string::npos) { @@ -160,7 +162,7 @@ inline vector explode(const string &s, string delim=" ") { return out; } -#include "lang/verify.h" +#include "verify.h" #include "threaded_log.h" // struct tuple adapter, useful for marshalling @@ -183,7 +185,7 @@ inline auto _tuple_() const -> decltype(tie(__VA_ARGS__)) { return tie(__VA_ARGS // LEXICOGRAPHIC_COMPARISON(foo) #define LEXICOGRAPHIC_OPERATOR(_c_, _op_) \ -inline bool operator _op_(const _c_ &b) const { return _tuple_() _op_ b._tuple_(); } +inline bool operator _op_(const _c_ & b) const { return _tuple_() _op_ b._tuple_(); } #define LEXICOGRAPHIC_COMPARISON(_c_) \ LEXICOGRAPHIC_OPERATOR(_c_, <) LEXICOGRAPHIC_OPERATOR(_c_, <=) \ @@ -210,8 +212,18 @@ template struct make_tuple_indices { // Template parameter pack expansion is not allowed in certain contexts, but // brace initializers (for instance, calls to constructors of empty structs) // are fair game. -struct pass { template inline pass(Args&&...) {} }; +struct pass { template inline pass(Args && ...) {} }; #include "endian.h" +#ifndef __has_attribute +#define __has_attribute(x) 0 +#endif + +#if __has_attribute(noreturn) +#define NORETURN [[noreturn]] +#else +#define NORETURN +#endif + #endif