NebulaGraph CPP Client  release-3.4
Set.h
1 /* Copyright (c) 2020 vesoft inc. All rights reserved.
2  *
3  * This source code is licensed under Apache 2.0 License.
4  */
5 
6 #pragma once
7 
8 #include <unordered_set>
9 
10 #include "common/datatypes/Value.h"
11 
12 namespace nebula {
13 
14 struct Set {
15  std::unordered_set<Value> values;
16 
17  Set() = default;
18  Set(const Set&) = default;
19  Set(Set&&) noexcept = default;
20  explicit Set(std::unordered_set<Value> value) {
21  values = std::move(value);
22  }
23 
24  void clear() {
25  values.clear();
26  }
27 
28  void __clear() {
29  clear();
30  }
31 
32  std::string toString() const;
33 
34  Set& operator=(const Set& rhs) {
35  if (this == &rhs) {
36  return *this;
37  }
38  values = rhs.values;
39  return *this;
40  }
41 
42  Set& operator=(Set&& rhs) noexcept {
43  if (this == &rhs) {
44  return *this;
45  }
46  values = std::move(rhs.values);
47  return *this;
48  }
49 
50  bool operator==(const Set& rhs) const {
51  return values == rhs.values;
52  }
53 
54  bool contains(const Value& value) const {
55  return values.count(value) != 0;
56  }
57 
58  size_t size() const {
59  return values.size();
60  }
61 };
62 
63 inline std::ostream& operator<<(std::ostream& os, const Set& s) {
64  return os << s.toString();
65 }
66 
67 } // namespace nebula
68 
69 namespace std {
70 template <>
71 struct hash<nebula::Set> {
72  std::size_t operator()(const nebula::Set& s) const noexcept;
73 };
74 
75 } // namespace std