mirror of
https://git.wownero.com/wownero/onion-wownero-blockchain-explorer.git
synced 2024-08-15 00:33:12 +00:00
json.http and crow modified to compile with latest gcc
This commit is contained in:
parent
0b350a027d
commit
fd14259c1f
7 changed files with 36 additions and 91 deletions
|
@ -389,32 +389,32 @@ namespace crow
|
||||||
// enable_if Arg1 == request && Arg2 == response
|
// enable_if Arg1 == request && Arg2 == response
|
||||||
// enable_if Arg1 == request && Arg2 != resposne
|
// enable_if Arg1 == request && Arg2 != resposne
|
||||||
// enable_if Arg1 != request
|
// enable_if Arg1 != request
|
||||||
#ifdef CROW_MSVC_WORKAROUND
|
//#ifdef CROW_MSVC_WORKAROUND
|
||||||
template <typename Func, size_t ... Indices>
|
// template <typename Func, size_t ... Indices>
|
||||||
#else
|
//#else
|
||||||
template <typename Func, unsigned ... Indices>
|
// template <typename Func, unsigned ... Indices>
|
||||||
#endif
|
//#endif
|
||||||
std::function<void(const request&, response&, const routing_params&)>
|
// std::function<void(const request&, response&, const routing_params&)>
|
||||||
wrap(Func f, black_magic::seq<Indices...>)
|
// wrap(Func f, black_magic::seq<Indices...>)
|
||||||
{
|
// {
|
||||||
#ifdef CROW_MSVC_WORKAROUND
|
//#ifdef CROW_MSVC_WORKAROUND
|
||||||
using function_t = utility::function_traits<decltype(&Func::operator())>;
|
// using function_t = utility::function_traits<decltype(&Func::operator())>;
|
||||||
#else
|
//#else
|
||||||
using function_t = utility::function_traits<Func>;
|
// using function_t = utility::function_traits<Func>;
|
||||||
#endif
|
//#endif
|
||||||
if (!black_magic::is_parameter_tag_compatible(
|
// if (!black_magic::is_parameter_tag_compatible(
|
||||||
black_magic::get_parameter_tag_runtime(rule_.c_str()),
|
// black_magic::get_parameter_tag_runtime(rule_.c_str()),
|
||||||
black_magic::compute_parameter_tag_from_args_list<
|
// black_magic::compute_parameter_tag_from_args_list<
|
||||||
typename function_t::template arg<Indices>...>::value))
|
// typename function_t::template arg<Indices>...>::value))
|
||||||
{
|
// {
|
||||||
throw std::runtime_error("route_dynamic: Handler type is mismatched with URL parameters: " + rule_);
|
// throw std::runtime_error("route_dynamic: Handler type is mismatched with URL parameters: " + rule_);
|
||||||
}
|
// }
|
||||||
auto ret = detail::routing_handler_call_helper::Wrapped<Func, typename function_t::template arg<Indices>...>();
|
// auto ret = detail::routing_handler_call_helper::Wrapped<Func, typename function_t::template arg<Indices>...>();
|
||||||
ret.template set<
|
// ret.template set<
|
||||||
typename function_t::template arg<Indices>...
|
// typename function_t::template arg<Indices>...
|
||||||
>(std::move(f));
|
// >(std::move(f));
|
||||||
return ret;
|
// return ret;
|
||||||
}
|
// }
|
||||||
|
|
||||||
template <typename Func>
|
template <typename Func>
|
||||||
void operator()(std::string name, Func&& f)
|
void operator()(std::string name, Func&& f)
|
||||||
|
|
|
@ -6379,10 +6379,10 @@ class basic_json
|
||||||
{
|
{
|
||||||
switch (lhs_type)
|
switch (lhs_type)
|
||||||
{
|
{
|
||||||
case value_t::array:
|
// case value_t::array:
|
||||||
{
|
// {
|
||||||
return *lhs.m_value.array < *rhs.m_value.array;
|
// return *lhs.m_value.array < *rhs.m_value.array;
|
||||||
}
|
// }
|
||||||
case value_t::object:
|
case value_t::object:
|
||||||
{
|
{
|
||||||
return *lhs.m_value.object < *rhs.m_value.object;
|
return *lhs.m_value.object < *rhs.m_value.object;
|
||||||
|
|
|
@ -1,36 +0,0 @@
|
||||||
#ifndef MEMBER_CHECKER_H
|
|
||||||
#define MEMBER_CHECKER_H
|
|
||||||
|
|
||||||
|
|
||||||
#define DEFINE_MEMBER_CHECKER(member) \
|
|
||||||
template<typename T, typename V = bool> \
|
|
||||||
struct has_ ## member : false_type { }; \
|
|
||||||
\
|
|
||||||
template<typename T> \
|
|
||||||
struct has_ ## member<T, \
|
|
||||||
typename enable_if< \
|
|
||||||
!is_same<decltype(declval<T>().member), void>::value, \
|
|
||||||
bool \
|
|
||||||
>::type \
|
|
||||||
> : true_type { };
|
|
||||||
|
|
||||||
#define HAS_MEMBER(C, member) \
|
|
||||||
has_ ## member<C>::value
|
|
||||||
|
|
||||||
|
|
||||||
// first getter if the member veriable is present, so we return its value
|
|
||||||
// second getter, when the member is not present, so we return empty value, e.g., empty string
|
|
||||||
#define DEFINE_MEMBER_GETTER(member, ret_value) \
|
|
||||||
template<typename T> \
|
|
||||||
typename enable_if<HAS_MEMBER(T, member), ret_value>::type \
|
|
||||||
get_ ## member (T t){ \
|
|
||||||
return t.member; \
|
|
||||||
} \
|
|
||||||
\
|
|
||||||
template<typename T> \
|
|
||||||
typename enable_if<!HAS_MEMBER(T, member), ret_value>::type \
|
|
||||||
get_ ## member (T t){ \
|
|
||||||
return ret_value(); \
|
|
||||||
}
|
|
||||||
|
|
||||||
#endif // MEMBER_CHECKER_H
|
|
6
main.cpp
6
main.cpp
|
@ -604,10 +604,10 @@ main(int ac, const char* av[])
|
||||||
|
|
||||||
cout << "Waiting for mempool monitoring thread to finish." << endl;
|
cout << "Waiting for mempool monitoring thread to finish." << endl;
|
||||||
|
|
||||||
xmerg::MempoolStatus::m_thread.interrupt();
|
xmreg::MempoolStatus::m_thread.interrupt();
|
||||||
xmerg::MempoolStatus::m_thread.join();
|
xmreg::MempoolStatus::m_thread.join();
|
||||||
|
|
||||||
cout << "Mmempool monitoring thread finished." << endl;
|
cout << "Mempool monitoring thread finished." << endl;
|
||||||
|
|
||||||
cout << "The explorer is terminating." << endl;
|
cout << "The explorer is terminating." << endl;
|
||||||
|
|
||||||
|
|
|
@ -29,6 +29,7 @@
|
||||||
#include <algorithm>
|
#include <algorithm>
|
||||||
#include <limits>
|
#include <limits>
|
||||||
#include <ctime>
|
#include <ctime>
|
||||||
|
#include <future>
|
||||||
|
|
||||||
#define TMPL_DIR "./templates"
|
#define TMPL_DIR "./templates"
|
||||||
#define TMPL_PARIALS_DIR TMPL_DIR "/partials"
|
#define TMPL_PARIALS_DIR TMPL_DIR "/partials"
|
||||||
|
|
|
@ -893,16 +893,6 @@ namespace xmreg
|
||||||
return make_pair(empty_time, scale);
|
return make_pair(empty_time, scale);
|
||||||
}
|
}
|
||||||
|
|
||||||
// useful reference to get epoch time in correct timezon
|
|
||||||
// http://www.boost.org/doc/libs/1_41_0/doc/html/date_time/examples.html#date_time.examples.seconds_since_epoch
|
|
||||||
time_t
|
|
||||||
ptime_to_time_t(const pt::ptime& in_ptime)
|
|
||||||
{
|
|
||||||
static pt::ptime epoch(gt::date(1970, 1, 1));
|
|
||||||
pt::time_duration::sec_type no_seconds = (in_ptime - epoch).total_seconds();
|
|
||||||
return time_t(no_seconds);
|
|
||||||
}
|
|
||||||
|
|
||||||
bool
|
bool
|
||||||
decode_ringct(const rct::rctSig& rv,
|
decode_ringct(const rct::rctSig& rv,
|
||||||
const crypto::public_key pub,
|
const crypto::public_key pub,
|
||||||
|
|
14
src/tools.h
14
src/tools.h
|
@ -13,29 +13,26 @@
|
||||||
#define REMOVE_HASH_BRAKETS(a_hash) \
|
#define REMOVE_HASH_BRAKETS(a_hash) \
|
||||||
a_hash.substr(1, a_hash.size()-2)
|
a_hash.substr(1, a_hash.size()-2)
|
||||||
|
|
||||||
#include "../ext/json.hpp"
|
|
||||||
|
|
||||||
#include "monero_headers.h"
|
#include "monero_headers.h"
|
||||||
|
|
||||||
#include "../ext/fmt/ostream.h"
|
#include "../ext/fmt/ostream.h"
|
||||||
#include "../ext/fmt/format.h"
|
#include "../ext/fmt/format.h"
|
||||||
|
#include "../ext/json.hpp"
|
||||||
|
|
||||||
#include <boost/lexical_cast.hpp>
|
#include <boost/lexical_cast.hpp>
|
||||||
#include <boost/filesystem.hpp>
|
#include <boost/filesystem.hpp>
|
||||||
#include <boost/optional.hpp>
|
#include <boost/optional.hpp>
|
||||||
//#include <boost/date_time/posix_time/posix_time.hpp>
|
|
||||||
|
|
||||||
|
|
||||||
#include <string>
|
#include <string>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
//#include <array>
|
|
||||||
#include <iterator>
|
#include <iterator>
|
||||||
#include <algorithm>
|
#include <algorithm>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Some helper functions used in the example.
|
* Some helper functions used in the example.
|
||||||
* Names are rather self-explanatory, so I think
|
* Names are rather self-explanatory, so I think
|
||||||
|
@ -49,9 +46,6 @@ namespace xmreg
|
||||||
using namespace std;
|
using namespace std;
|
||||||
|
|
||||||
namespace bf = boost::filesystem;
|
namespace bf = boost::filesystem;
|
||||||
namespace pt = boost::posix_time;
|
|
||||||
namespace gt = boost::gregorian;
|
|
||||||
namespace lt = boost::local_time;
|
|
||||||
|
|
||||||
using json = nlohmann::json;
|
using json = nlohmann::json;
|
||||||
|
|
||||||
|
@ -225,10 +219,6 @@ namespace xmreg
|
||||||
uint64_t timeN, uint64_t resolution = 80,
|
uint64_t timeN, uint64_t resolution = 80,
|
||||||
uint64_t time0 = 1397818193 /* timestamp of the second block */);
|
uint64_t time0 = 1397818193 /* timestamp of the second block */);
|
||||||
|
|
||||||
|
|
||||||
time_t
|
|
||||||
ptime_to_time_t(const pt::ptime& in_ptime);
|
|
||||||
|
|
||||||
bool
|
bool
|
||||||
decode_ringct(const rct::rctSig & rv,
|
decode_ringct(const rct::rctSig & rv,
|
||||||
const crypto::public_key pub,
|
const crypto::public_key pub,
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue