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#include <string_view>
18
19namespace jsonv
20{
21
22class value;
23
24/** \addtogroup Algorithm
25 * \{
26**/
27
28/** Compares a \c value to another using the standard-issue \c value::compare function. **/
30{
33 using result_type = int;
34
36 int operator()(const value& a, const value& b) const;
37};
38
39/** Compares two values, ignoring the case for any \c value with \c kind::string. This does \e not ignore case for the
40 * keys of objects.
41**/
43{
46 using result_type = int;
47
49 int operator()(const value& a, const value& b) const;
50};
51
52template <typename FCompare, typename FResult>
54 private FCompare,
55 private FResult
56{
59 using result_type = bool;
60
62 bool operator()(const value& a, const value& b) const
63 {
64 return FResult::operator()(FCompare::operator()(a, b), 0);
65 }
66};
67
80
81/** \} **/
82
83namespace detail
84{
85
86/// Compare \a a with a \c kind::string holding \a b, exactly as \c compare would compare the two -- without building a
87/// \c value to hold \a b. Against any other kind the kinds alone decide, and against a string the text does.
88///
89/// This is how \c enum_adapter looks up a string read from JSON text in a table ordered by \c value_less, which is why
90/// it has to agree with \c compare on every pair rather than merely on equality.
91JSONV_NODISCARD JSONV_PUBLIC int compare_text(const value& a, std::string_view b);
92
93/// \c compare_text with the case folding of \c compare_icase, for a table ordered by \c value_less_icase.
94JSONV_NODISCARD JSONV_PUBLIC int compare_text_icase(const value& a, std::string_view b);
95
96}
97
98}
Represents a single JSON value, which can be any one of a potential kind, each behaving slightly diff...
Definition value.hpp:113
Copyright (c) 2014-2020 by Travis Gockel.
#define JSONV_NODISCARD
Warn if the caller discards the result of this function.
Definition config.hpp:143
#define JSONV_PUBLIC
This function or class is part of the public API for JSON Voorhees.
Definition config.hpp:124
Compares two values, ignoring the case for any value with kind::string.
Compares a value to another using the standard-issue value::compare function.