JSON Voorhees
Killer JSON for C++
Loading...
Searching...
No Matches
functional.hpp
Go to the documentation of this file.
1
/** \file jsonv/functional.hpp
2
* A collection of function objects a la `<functional>`.
3
*
4
* Copyright (c) 2015 by Travis Gockel. All rights reserved.
5
*
6
* This program is free software: you can redistribute it and/or modify it under the terms of the Apache License
7
* as published by the Apache Software Foundation, either version 2 of the License, or (at your option) any later
8
* version.
9
*
10
* \author Travis Gockel (travis@gockelhut.com)
11
**/
12
#pragma once
13
14
#include <
jsonv/config.hpp
>
15
16
#include <functional>
17
18
namespace
jsonv
19
{
20
21
class
value;
22
23
/** \addtogroup Algorithm
24
* \{
25
**/
26
27
/** Compares a \c value to another using the standard-issue \c value::compare function. **/
28
struct
value_compare
29
{
30
using
first_argument_type
=
value
;
31
using
second_argument_type
=
value
;
32
using
result_type
=
int
;
33
34
JSONV_NODISCARD
35
int
operator()(
const
value
&
a
,
const
value
&
b
)
const
;
36
};
37
38
/** Compares two values, ignoring the case for any \c value with \c kind::string. This does \e not ignore case for the
39
* keys of objects.
40
**/
41
struct
value_compare_icase
42
{
43
using
first_argument_type
=
value
;
44
using
second_argument_type
=
value
;
45
using
result_type
=
int
;
46
47
JSONV_NODISCARD
48
int
operator()(
const
value
&
a
,
const
value
&
b
)
const
;
49
};
50
51
template
<
typename
FCompare,
typename
FResult>
52
struct
basic_value_binary_predicate
:
53
private
FCompare,
54
private
FResult
55
{
56
using
first_argument_type
=
value
;
57
using
second_argument_type
=
value
;
58
using
result_type
=
bool
;
59
60
JSONV_NODISCARD
61
bool
operator()(
const
value
&
a
,
const
value
&
b
)
const
62
{
63
return
FResult::operator()(FCompare::operator()(
a
,
b
), 0);
64
}
65
};
66
67
using
value_equal_to
=
basic_value_binary_predicate<value_compare, std::equal_to<int>
>;
68
using
value_equal_to_icase
=
basic_value_binary_predicate<value_compare_icase, std::equal_to<int>
>;
69
using
value_not_equal_to
=
basic_value_binary_predicate<value_compare, std::not_equal_to<int>
>;
70
using
value_not_equal_to_icase
=
basic_value_binary_predicate<value_compare_icase, std::not_equal_to<int>
>;
71
using
value_less
=
basic_value_binary_predicate<value_compare, std::less<int>
>;
72
using
value_less_icase
=
basic_value_binary_predicate<value_compare_icase, std::less<int>
>;
73
using
value_less_equal
=
basic_value_binary_predicate<value_compare, std::less_equal<int>
>;
74
using
value_less_equal_icase
=
basic_value_binary_predicate<value_compare_icase, std::less_equal<int>
>;
75
using
value_greater
=
basic_value_binary_predicate<value_compare, std::greater<int>
>;
76
using
value_greater_icase
=
basic_value_binary_predicate<value_compare_icase, std::greater<int>
>;
77
using
value_greater_equal
=
basic_value_binary_predicate<value_compare, std::greater_equal<int>
>;
78
using
value_greater_equal_icase
=
basic_value_binary_predicate<value_compare_icase, std::greater_equal<int>
>;
79
80
/** \} **/
81
82
}
jsonv::enum_adapter
An adapter for enumeration types.
Definition
enum_adapter.hpp:41
jsonv::value
Represents a single JSON value, which can be any one of a potential kind, each behaving slightly diff...
Definition
value.hpp:113
config.hpp
Copyright (c) 2014-2020 by Travis Gockel.
JSONV_NODISCARD
#define JSONV_NODISCARD
Warn if the caller discards the result of this function.
Definition
config.hpp:121
jsonv::basic_value_binary_predicate
Definition
functional.hpp:55
jsonv::value_compare_icase
Compares two values, ignoring the case for any value with kind::string.
Definition
functional.hpp:42
jsonv::value_compare
Compares a value to another using the standard-issue value::compare function.
Definition
functional.hpp:29
jsonv
functional.hpp
Generated by
1.9.8