Skip to content
Snippets Groups Projects
Commit 670fff11 authored by Recolic Keghart's avatar Recolic Keghart
Browse files

upgrade rlib version

parent 6648a786
No related branches found
No related tags found
No related merge requests found
BasedOnStyle: LLVM
IndentWidth: 4
ColumnLimit: 100
......@@ -19,7 +19,7 @@ namespace rlib {
node *prev;
node *next;
extra_info_t extra_info; // bool flag. specially designed for object_pool.
uint32_t magic = 0x19980427;
uint32_t magic = 0x19990823;
template <typename... TConstructArgs>
node(node *prev, node *next, const extra_info_t &extra_info, TConstructArgs... args)
: data(std::forward<TConstructArgs>(args) ...), prev(prev), next(next), extra_info(extra_info)
......@@ -36,7 +36,7 @@ namespace rlib {
explicit iterator(node *ptr) : ptr(ptr) {}
explicit iterator(T *data_pointer) : ptr(reinterpret_cast<node *>(data_pointer)) {
if (ptr->magic != 0x19980427)
if (ptr->magic != 0x19990823)
throw std::invalid_argument(
"magic_num verification failed. invalid data_pointer passed or ruined memory?");
}
......
......@@ -54,6 +54,19 @@ namespace rlib {
#endif
template <size_t... forwardedArgs> struct argForwarder {};
}
namespace impl {
template <typename T, std::size_t _>
using get_T = T;
template <typename T, std::size_t... _>
auto make_N_tuple_impl_f(std::index_sequence<_ ...>) {
using make_N_tuple_impl = std::tuple<get_T<T, _> ...>;
return make_N_tuple_impl();
}
} // end namespace rlib::impl
template <typename T, std::size_t N>
using N_tuple_t = decltype(impl::make_N_tuple_impl_f<T>(std::make_integer_sequence<std::size_t, N>()));
} // end namespace rlib
#endif
......@@ -80,14 +80,6 @@ namespace rlib {
void println();
template <typename... Args>
void print(Args... args);
template <typename Iterable, typename Printable>
void print_iter(Iterable arg, Printable spliter);
template <typename Iterable, typename Printable>
void println_iter(Iterable arg, Printable spliter);
template <typename Iterable>
void print_iter(Iterable arg);
template <typename Iterable>
void println_iter(Iterable arg);
template <typename... Args>
size_t printf(const std::string &fmt, Args... args);
template <typename... Args>
......@@ -100,6 +92,23 @@ namespace rlib {
static bool instance = true;
return instance;
}
template <typename Iterable, typename Printable>
struct _printable_iterable : private std::pair<Iterable, Printable> {
using std::pair<Iterable, Printable>::pair;
const Iterable &arg() const {return std::pair<Iterable, Printable>::first;}
const Printable &spliter() const {return std::pair<Iterable, Printable>::second;}
};
}
// 2 more interfaces...
template <typename Iterable, typename Printable>
const impl::_printable_iterable<Iterable, Printable> printable_iter(Iterable arg, Printable spliter) {
return impl::_printable_iterable<Iterable, Printable>(arg, spliter);
}
template <typename Iterable>
const impl::_printable_iterable<Iterable, char> printable_iter(Iterable arg) {
return impl::_printable_iterable<Iterable, char>(arg, ' ');
}
inline bool sync_with_stdio(bool sync = true) noexcept {
......@@ -122,18 +131,18 @@ namespace rlib {
template <typename PrintFinalT>
void print(std::ostream &os, PrintFinalT reqArg)
{
os << reqArg;
os << std::forward<PrintFinalT>(reqArg);
}
template <typename Required, typename... Optional>
void print(std::ostream &os, Required reqArgs, Optional... optiArgs)
{
os << reqArgs << ' ';
print(os, optiArgs ...);
print(os, std::forward<Optional>(optiArgs) ...);
}
template <typename... Optional>
void println(std::ostream &os, Optional... optiArgs)
{
print(os, optiArgs ...);
print(os, std::forward<Optional>(optiArgs) ...);
println(os);
}
template <>
......@@ -142,29 +151,6 @@ namespace rlib {
os << rlib::endl;
}
template <typename Iterable, typename Printable>
void print_iter(std::ostream &os, Iterable arg, Printable spliter)
{
for(const auto & i : arg)
os << i << spliter;
}
template <typename Iterable, typename Printable>
void println_iter(std::ostream &os, Iterable arg, Printable spliter)
{
print_iter(os, arg, spliter);
println(os);
}
template <typename Iterable>
void print_iter(std::ostream &os, Iterable arg)
{
print_iter(os, arg, ' ');
}
template <typename Iterable>
void println_iter(std::ostream &os, Iterable arg)
{
println_iter(os, arg, ' ');
}
template <typename... Args>
size_t printf(std::ostream &os, const std::string &fmt, Args... args)
{
......@@ -195,22 +181,6 @@ namespace rlib {
void print(Args... args) {
return print(std::cout, std::forward<Args>(args) ...);
}
template <typename Iterable, typename Printable>
void print_iter(Iterable arg, Printable spliter) {
return print_iter(std::cout, std::forward<Iterable>(arg), spliter);
}
template <typename Iterable, typename Printable>
void println_iter(Iterable arg, Printable spliter) {
return println_iter(std::cout, std::forward<Iterable>(arg), spliter);
}
template <typename Iterable>
void print_iter(Iterable arg) {
return print_iter(std::cout, std::forward<Iterable>(arg));
}
template <typename Iterable>
void println_iter(Iterable arg) {
return println_iter(std::cout, std::forward<Iterable>(arg));
}
template <typename... Args>
size_t printf(const std::string &fmt, Args... args) {
return printf(std::cout, fmt, std::forward<Args>(args) ...);
......@@ -237,7 +207,14 @@ namespace rlib {
std::ostream &, impl::print_wrapper<StreamType>>::type;
return print(static_cast<ostream_or_data>(os), std::forward<Args>(args) ...);
}
}
} // end namespace rlib
template <typename Iterable, typename Printable>
std::ostream& operator<< (std::ostream& stream, const rlib::impl::_printable_iterable<Iterable, Printable> &p) {
for(auto val : p.arg()) {
stream << val << p.spliter();
}
return stream;
}
#endif
......@@ -631,7 +631,7 @@ namespace rlib {
private:
#pragma pack(push, 1)
struct packed_msg_head {
uint32_t magic = 0x19980427;
uint32_t magic = 0x19990823;
uint64_t len;
};
#pragma pack(pop)
......@@ -640,7 +640,7 @@ namespace rlib {
static std::string recv_msg(sockfd_t fd) {
packed_msg_head head;
recvn_ex(fd, &head, sizeof(head), MSG_NOSIGNAL);
if(head.magic != 0x19980427)
if(head.magic != 0x19990823)
throw std::runtime_error("Invalid magic received.");
if(head.len > 1024ull*1024*1024*2)
throw std::runtime_error("Message len is greater than 2GiB. Refuse to alloc space.");
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment