Blender V4.3
BLI_ordered_edge.hh
Go to the documentation of this file.
1/* SPDX-FileCopyrightText: 2023 Blender Authors
2 *
3 * SPDX-License-Identifier: GPL-2.0-or-later */
4
5#pragma once
6
7#include "BLI_assert.h"
9
10namespace blender {
11
17 int v_low;
18 int v_high;
19
20 OrderedEdge(const int v1, const int v2)
21 {
22 if (v1 < v2) {
23 v_low = v1;
24 v_high = v2;
25 }
26 else {
27 v_low = v2;
28 v_high = v1;
29 }
30 }
31 OrderedEdge(const int2 edge) : OrderedEdge(edge[0], edge[1]) {}
32 OrderedEdge(const uint v1, const uint v2) : OrderedEdge(int(v1), int(v2)) {}
33
34 uint64_t hash() const
35 {
36 return (this->v_low << 8) ^ this->v_high;
37 }
38
39 friend bool operator==(const OrderedEdge &e1, const OrderedEdge &e2)
40 {
41 return e1.v_low == e2.v_low && e1.v_high == e2.v_high;
42 }
43
44 friend bool operator!=(const OrderedEdge &e1, const OrderedEdge &e2)
45 {
46 return !(e1 == e2);
47 }
48
49 friend bool operator<(const OrderedEdge &e1, const OrderedEdge &e2)
50 {
51 if (e1.v_low != e2.v_low) {
52 return e1.v_low < e2.v_low;
53 }
54 return e1.v_high < e2.v_high;
55 }
56
57 friend std::ostream &operator<<(std::ostream &stream, const OrderedEdge &e);
58};
59
60} // namespace blender
unsigned int uint
ATTR_WARN_UNUSED_RESULT const BMVert * v2
ATTR_WARN_UNUSED_RESULT const BMVert const BMEdge * e
draw_view push_constant(Type::INT, "radiance_src") .push_constant(Type capture_info_buf storage_buf(1, Qualifier::READ, "ObjectBounds", "bounds_buf[]") .push_constant(Type draw_view int
unsigned __int64 uint64_t
Definition stdint.h:90
friend bool operator!=(const OrderedEdge &e1, const OrderedEdge &e2)
uint64_t hash() const
OrderedEdge(const int v1, const int v2)
OrderedEdge(const int2 edge)
friend std::ostream & operator<<(std::ostream &stream, const OrderedEdge &e)
friend bool operator==(const OrderedEdge &e1, const OrderedEdge &e2)
OrderedEdge(const uint v1, const uint v2)
friend bool operator<(const OrderedEdge &e1, const OrderedEdge &e2)