15 #ifndef CROW_MSVC_WORKAROUND 22 return i >= len ?
throw OutOfRange(i, len) : i;
31 template<
unsigned N >
33 static_assert( N >= 1,
"not a string literal");
39 constexpr
operator const char *()
const {
46 constexpr
unsigned size()
const {
70 constexpr
bool is_equ_p(
const char*
a,
const char*
b,
unsigned n)
73 *
a == 0 && *
b == 0 && n == 0
87 ai + n >
a.size() || bi + n >
b.size()
108 return is_equ_n(
s, i,
"<float>", 0, 7) ||
123 template <
typename T>
128 #define CROW_INTERNAL_PARAMETER_TAG(t, i) \ 130 struct parameter_tag<t> \ 132 static const int value = i; \ 146 #undef CROW_INTERNAL_PARAMETER_TAG 147 template <
typename ... Args>
153 static const int value = 0;
156 template <
typename Arg,
typename ... Args>
159 static const int sub_value =
161 static const int value =
186 ?
throw std::runtime_error(
"unmatched tag <") :
197 std::strncmp(
s+p,
"<int>", 5) == 0
199 std::strncmp(
s+p,
"<uint>", 6) == 0
201 (std::strncmp(
s+p,
"<float>", 7) == 0 ||
202 std::strncmp(
s+p,
"<double>", 8) == 0)
204 (std::strncmp(
s+p,
"<str>", 5) == 0 ||
205 std::strncmp(
s+p,
"<string>", 8) == 0)
207 std::strncmp(
s+p,
"<path>", 6) == 0
209 throw std::runtime_error(
"invalid parameter type")
213 #ifndef CROW_MSVC_WORKAROUND 230 throw std::runtime_error(
"invalid parameter type")
236 template <
typename ...
T>
239 template <
typename U>
241 template <
typename U>
243 template <
template<
typename ... Args>
class U>
246 template <
typename F,
typename Set>
248 template <
typename F,
typename ...Args>
251 template <
typename F1,
typename ...Args1,
typename =
252 decltype(std::declval<F1>()(std::declval<Args1>()...))
254 static char __test(
int);
256 template <
typename ...>
257 static int __test(...);
259 static constexpr
bool value =
sizeof(__test<
F, Args...>(0)) ==
sizeof(char);
299 template <u
int64_t Tag>
313 template <
typename ...
T>
316 using type =
typename std::tuple_element<
sizeof...(T)-1, std::tuple<T...>>::
type;
331 template<
class S1,
class S2>
struct concat;
333 template<
unsigned... I1,
unsigned... I2>
335 :
seq<I1..., (sizeof...(I1)+I2)...>{};
337 template<
class S1,
class S2>
349 template <
typename Seq,
typename Tuple>
352 template <
unsigned ... N,
typename Tuple>
355 template <
template <
typename ... Args>
class U>
359 template <
typename ...
T>
362 template <
template <
typename ... Args>
class U>
369 template <
template <
typename ... Args>
class U>
374 template <
typename Tp,
typename... List >
377 template <
typename Tp,
typename Head,
typename... Rest >
379 : std::conditional< std::is_same<Tp, Head>::value,
381 contains<Tp, Rest...>
384 template <
typename Tp >
387 template <
typename T>
392 template <
typename T>
398 #define CROW_INTERNAL_PROMOTE_TYPE(t1, t2) \ 416 #undef CROW_INTERNAL_PROMOTE_TYPE 418 template <
typename T>
426 template <
class T, std::size_t N,
class... Args>
432 template <
class T, std::size_t N,
class... Args>
438 template <
class T, std::size_t N,
class U,
class... Args>
448 template <
class T,
class... Args>
457 #ifndef CROW_MSVC_WORKAROUND 470 template<
typename ClassType,
typename R,
typename ...Args>
473 static const size_t arity =
sizeof...(Args);
478 using arg =
typename std::tuple_element<i, std::tuple<Args...>>
::type;
481 template<
typename ClassType,
typename R,
typename ...Args>
484 static const size_t arity =
sizeof...(Args);
489 using arg =
typename std::tuple_element<i, std::tuple<Args...>>
::type;
492 template<
typename R,
typename ...Args>
495 static const size_t arity =
sizeof...(Args);
500 using arg =
typename std::tuple_element<i, std::tuple<Args...>>
::type;
503 std::string
base64encode(
const char* data,
size_t size,
const char* key =
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/")
506 ret.resize((size+2) / 3 * 4);
507 auto it = ret.begin();
510 *it++ = key[(((
unsigned char)*data)&0xFC)>>2];
511 unsigned char h = (((
unsigned char)*data++) & 0x03) << 4;
512 *it++ = key[h|((((
unsigned char)*data)&0xF0)>>4)];
513 h = (((
unsigned char)*data++) & 0x0F) << 2;
514 *it++ = key[h|((((
unsigned char)*data)&0xC0)>>6)];
515 *it++ = key[((
unsigned char)*data++)&0x3F];
521 *it++ = key[(((
unsigned char)*data)&0xFC)>>2];
522 unsigned char h = (((
unsigned char)*data++) & 0x03) << 4;
529 *it++ = key[(((
unsigned char)*data)&0xFC)>>2];
530 unsigned char h = (((
unsigned char)*data++) & 0x03) << 4;
531 *it++ = key[h|((((
unsigned char)*data)&0xF0)>>4)];
532 h = (((
unsigned char)*data++) & 0x0F) << 2;
541 return base64encode(data, size,
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_");
constexpr bool is_float(const_str s, unsigned i)
Definition: utility.h:106
typename std::tuple_element< i, std::tuple< Args... > >::type arg
Definition: utility.h:489
Definition: utility.h:375
Definition: utility.h:427
const uint32_t T[512]
Definition: groestl_tables.h:34
typename arguments< Tag/6 >::type subarguments
Definition: utility.h:302
Definition: utility.h:293
constexpr bool is_valid(const_str s, unsigned i=0, int f=0)
Definition: utility.h:56
Invoke< concat< S1, S2 > > Concat
Definition: utility.h:338
typename parent_t::result_type result_type
Definition: utility.h:463
const char *const begin_
Definition: utility.h:27
Definition: utility.h:360
std::string base64encode(const char *data, size_t size, const char *key="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/")
Definition: utility.h:503
#define F(w, k)
Definition: sha512-blocks.c:61
T & get_element_by_type(std::tuple< Args... > &t)
Definition: utility.h:449
static unsigned find_closing_tag_runtime(const char *s, unsigned p)
Definition: utility.h:182
constexpr bool is_uint(const_str s, unsigned i)
Definition: utility.h:101
typename promote< T >::type promote_t
Definition: utility.h:419
typename pop_back_helper< typename gen_seq< sizeof...(T) -1 >::type, std::tuple< T... > >::template rebind< U > rebind
Definition: utility.h:363
unsigned size_
Definition: utility.h:28
OutOfRange(unsigned, unsigned)
Definition: utility.h:18
Definition: block_queue.cpp:41
static constexpr auto value
Definition: utility.h:429
constexpr bool is_path(const_str s, unsigned i)
Definition: utility.h:118
constexpr unsigned size() const
Definition: utility.h:46
U< typename std::tuple_element< N, Tuple >::type... > rebind
Definition: utility.h:356
Definition: utility.h:237
std::string base64encode_urlsafe(const char *data, size_t size)
Definition: utility.h:539
typename std::tuple_element< i, std::tuple< Args... > >::type arg
Definition: utility.h:478
U< T... > rebind
Definition: utility.h:244
Definition: utility.h:455
Definition: utility.h:247
Definition: utility.h:314
declaration and default definition for the functions used the API
CROW_INTERNAL_PARAMETER_TAG(int, 1)
Definition: utility.h:269
int64_t type
Definition: utility.h:271
constexpr unsigned find_closing_tag(const_str s, unsigned p)
Definition: utility.h:51
Definition: utility.h:287
int b
Definition: base.py:1
constexpr bool is_int(const_str s, unsigned i)
Definition: utility.h:96
type
Definition: json.h:74
#define false
Definition: stdbool.h:38
static uint64_t get_parameter_tag_runtime(const char *s, unsigned p=0)
Definition: utility.h:191
Definition: utility.h:329
R result_type
Definition: utility.h:475
typename std::tuple_element< i, std::tuple< Args... > >::type arg
Definition: utility.h:500
std::string type
Definition: utility.h:295
constexpr bool is_str(const_str s, unsigned i)
Definition: utility.h:112
Invoke< gen_seq< N > > GenSeq
Definition: utility.h:341
Definition: utility.h:331
constexpr unsigned requires_in_range(unsigned i, unsigned len)
Definition: utility.h:20
constexpr uint64_t get_parameter_tag(const_str s, unsigned p=0)
Definition: utility.h:214
U<> rebind
Definition: utility.h:370
constexpr bool is_equ_p(const char *a, const char *b, unsigned n)
Definition: utility.h:70
Definition: utility.h:148
Definition: utility.h:388
Definition: utility.h:350
typename std::tuple_element< sizeof...(T) -1, std::tuple< T... > >::type type
Definition: utility.h:316
constexpr const char * begin() const
Definition: utility.h:43
string a
Definition: MakeCryptoOps.py:15
constexpr const_str(const char(&arr)[N])
Definition: utility.h:32
double type
Definition: utility.h:283
uint64_t type
Definition: utility.h:277
typename T::type Invoke
Definition: utility.h:327
constexpr char operator[](unsigned i) const
Definition: utility.h:35
R result_type
Definition: utility.h:486
Definition: utility.h:281
Definition: utility.h:264
static const size_t arity
Definition: utility.h:462
typename parent_t::template arg< i > arg
Definition: utility.h:465
CROW_INTERNAL_PROMOTE_TYPE(char, int64_t)
Definition: utility.h:275
Definition: utility.h:340
static bool is_parameter_tag_compatible(uint64_t a, uint64_t b)
Definition: utility.h:167
std::string type
Definition: utility.h:289
typename subarguments::template push< typename single_tag_to_type< Tag%6 >::type > type
Definition: utility.h:304
R result_type
Definition: utility.h:497
#define true
Definition: stdbool.h:37
#define s(x, c)
Definition: aesb.c:46
Definition: utility.h:124
constexpr const char * end() const
Definition: utility.h:44
static const int value
Definition: utility.h:126
Definition: utility.h:300
constexpr bool is_equ_n(const_str a, unsigned ai, const_str b, unsigned bi, unsigned n)
Definition: utility.h:84