added iOS source code
[wl-app.git] / iOS / Pods / Realm / include / core / realm / metrics / query_info.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_QUERY_INFO_HPP
20 #define REALM_QUERY_INFO_HPP
21
22 #include <memory>
23 #include <string>
24 #include <sstream>
25
26 #include <realm/array.hpp>
27 #include <realm/util/features.h>
28 #include <realm/metrics/metric_timer.hpp>
29
30 #if REALM_METRICS
31
32 namespace realm {
33
34 class Query; // forward declare in namespace realm
35
36 namespace metrics {
37
38 class QueryInfo {
39 public:
40
41     enum QueryType {
42         type_Find,
43         type_FindAll,
44         type_Count,
45         type_Sum,
46         type_Average,
47         type_Maximum,
48         type_Minimum,
49         type_Invalid
50     };
51
52     QueryInfo(const Query* query, QueryType type);
53     ~QueryInfo() noexcept;
54
55     std::string get_description() const;
56     QueryType get_type() const;
57     double get_query_time() const;
58
59     static std::unique_ptr<MetricTimer> track(const Query* query, QueryType type);
60     static QueryType type_from_action(Action action);
61
62 private:
63     std::string m_description;
64     QueryType m_type;
65     std::shared_ptr<MetricTimerResult> m_query_time;
66 };
67
68 } // namespace metrics
69 } // namespace realm
70
71 #endif // REALM_METRICS
72 #endif // REALM_QUERY_INFO_HPP