NebulaGraph CPP Client  release-3.4
Edge.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_map>
9 
10 #include "common/datatypes/Value.h"
11 #include "common/thrift/ThriftTypes.h"
12 
13 namespace nebula {
14 
15 struct Edge {
16  Value src;
17  Value dst;
18  EdgeType type;
19  std::string name;
20  EdgeRanking ranking;
21  std::unordered_map<std::string, Value> props;
22 
23  Edge() {}
24  Edge(Edge&& v) noexcept
25  : src(std::move(v.src)),
26  dst(std::move(v.dst)),
27  type(std::move(v.type)),
28  name(std::move(v.name)),
29  ranking(std::move(v.ranking)),
30  props(std::move(v.props)) {}
31  Edge(const Edge& v)
32  : src(v.src), dst(v.dst), type(v.type), name(v.name), ranking(v.ranking), props(v.props) {}
33  Edge(Value s,
34  Value d,
35  EdgeType t,
36  std::string n,
37  EdgeRanking r,
38  std::unordered_map<std::string, Value>&& p)
39  : src(std::move(s)),
40  dst(std::move(d)),
41  type(std::move(t)),
42  name(std::move(n)),
43  ranking(std::move(r)),
44  props(std::move(p)) {}
45 
46  void clear();
47 
48  void __clear() {
49  clear();
50  }
51 
52  std::string toString() const;
53 
54  bool operator==(const Edge& rhs) const;
55 
56  void format() {
57  if (type < 0) {
58  reverse();
59  }
60  }
61 
62  void reverse();
63 
64  bool operator<(const Edge& rhs) const;
65 
66  bool contains(const Value& key) const;
67 
68  const Value& value(const std::string& key) const;
69 };
70 
71 inline std::ostream& operator<<(std::ostream& os, const Edge& v) {
72  return os << v.toString();
73 }
74 
75 } // namespace nebula
76 
77 namespace std {
78 
79 // Inject a customized hash function
80 template <>
81 struct hash<nebula::Edge> {
82  std::size_t operator()(const nebula::Edge& h) const noexcept;
83 };
84 
85 } // namespace std