blob: 4cc9393fbd02e37da070e56f4f34bdb151eb33d5 [file] [log] [blame]
Joe Onorato9fc9edf2017-10-15 20:08:52 -07001/*
2 * Copyright (C) 2017 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17#pragma once
18
19#include "frameworks/base/cmds/statsd/src/statsd_config.pb.h"
20
Joe Onorato9fc9edf2017-10-15 20:08:52 -070021#include <string>
22
23namespace android {
24namespace os {
25namespace statsd {
26
27using std::hash;
Joe Onorato9fc9edf2017-10-15 20:08:52 -070028using std::string;
29
30/**
31 * Uniquely identifies a configuration.
32 */
33class ConfigKey {
34public:
35 ConfigKey();
Chih-Hung Hsieh3227aab2018-12-20 13:42:28 -080036 ConfigKey(const ConfigKey& that);
Yangster-mac94e197c2018-01-02 16:03:03 -080037 ConfigKey(int uid, const int64_t& id);
Joe Onorato9fc9edf2017-10-15 20:08:52 -070038 ~ConfigKey();
39
40 inline int GetUid() const {
41 return mUid;
42 }
Yangster-mac94e197c2018-01-02 16:03:03 -080043 inline const int64_t& GetId() const {
44 return mId;
Joe Onorato9fc9edf2017-10-15 20:08:52 -070045 }
46
47 inline bool operator<(const ConfigKey& that) const {
48 if (mUid < that.mUid) {
49 return true;
50 }
51 if (mUid > that.mUid) {
52 return false;
53 }
Yangster-mac94e197c2018-01-02 16:03:03 -080054 return mId < that.mId;
Joe Onorato9fc9edf2017-10-15 20:08:52 -070055 };
56
57 inline bool operator==(const ConfigKey& that) const {
Yangster-mac94e197c2018-01-02 16:03:03 -080058 return mUid == that.mUid && mId == that.mId;
Joe Onorato9fc9edf2017-10-15 20:08:52 -070059 };
60
61 string ToString() const;
62
63private:
Yangster-mac94e197c2018-01-02 16:03:03 -080064 int64_t mId;
Joe Onorato9fc9edf2017-10-15 20:08:52 -070065 int mUid;
66};
67
Yangster-mac94e197c2018-01-02 16:03:03 -080068int64_t StrToInt64(const string& str);
69
Joe Onorato9fc9edf2017-10-15 20:08:52 -070070} // namespace statsd
71} // namespace os
72} // namespace android
73
74/**
75 * A hash function for ConfigKey so it can be used for unordered_map/set.
yro87d983c2017-11-14 21:31:43 -080076 * Unfortunately this has to go in std namespace because C++ is fun!
Joe Onorato9fc9edf2017-10-15 20:08:52 -070077 */
78namespace std {
79
80using android::os::statsd::ConfigKey;
81
82template <>
83struct hash<ConfigKey> {
84 std::size_t operator()(const ConfigKey& key) const {
Yangster-mac94e197c2018-01-02 16:03:03 -080085 return (7 * key.GetUid()) ^ ((hash<long long>()(key.GetId())));
Joe Onorato9fc9edf2017-10-15 20:08:52 -070086 }
87};
88
89} // namespace std