added iOS source code
[wl-app.git] / iOS / Pods / Realm / include / core / realm / util / inspect.hpp
1 /*************************************************************************
2  *
3  * Copyright 2016 Realm Inc.
4  *
5  * Licensed under the Apache License, Version 2.0 (the "License");
6  * you may not use this file except in compliance with the License.
7  * You may obtain a copy of the License at
8  *
9  * http://www.apache.org/licenses/LICENSE-2.0
10  *
11  * Unless required by applicable law or agreed to in writing, software
12  * distributed under the License is distributed on an "AS IS" BASIS,
13  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14  * See the License for the specific language governing permissions and
15  * limitations under the License.
16  *
17  **************************************************************************/
18
19 #ifndef REALM_UTIL_INSPECT_HPP
20 #define REALM_UTIL_INSPECT_HPP
21
22 #include <string>
23
24 namespace realm {
25 namespace util {
26
27 // LCOV_EXCL_START
28 //
29 // Because these are templated functions, every combination of output stream
30 // type and value(s) type(s) generates a new function.  This makes LCOV/GCOVR
31 // report over 70 functions in this file, with only 6.6% function coverage,
32 // even though line coverage is at 100%.
33
34 template <class OS, class T>
35 void inspect_value(OS& os, const T& value)
36 {
37     os << value;
38 }
39
40 template <class OS>
41 void inspect_value(OS& os, const std::string& value)
42 {
43     // FIXME: Escape the string.
44     os << "\"" << value << "\"";
45 }
46
47 template <class OS>
48 void inspect_value(OS& os, const char* value)
49 {
50     // FIXME: Escape the string.
51     os << "\"" << value << "\"";
52 }
53
54 template <class OS>
55 void inspect_all(OS&)
56 {
57     // No-op
58 }
59
60 /// Convert all arguments to strings, and quote string arguments.
61 template <class OS, class First, class... Args>
62 void inspect_all(OS& os, First&& first, Args&&... args)
63 {
64     inspect_value(os, std::forward<First>(first));
65     if (sizeof...(Args) != 0) {
66         os << ", ";
67     }
68     inspect_all(os, std::forward<Args>(args)...);
69 }
70
71 // LCOV_EXCL_STOP
72
73 } // namespace util
74 } // namespace realm
75
76 #endif // REALM_UTIL_INSPECT_HPP