15#ifndef DRACO_MESH_VALENCE_CACHE_H_
16#define DRACO_MESH_VALENCE_CACHE_H_
30template <
class CornerTableT>
32 const CornerTableT &table_;
35 explicit ValenceCache(
const CornerTableT &table) : table_(table) {}
39 if (c == kInvalidCornerIndex) {
45 if (c == kInvalidCornerIndex) {
53 DRACO_DCHECK_EQ(vertex_valence_cache_32_bit_.size(), table_.num_vertices());
54 return vertex_valence_cache_32_bit_[v];
67 if (vertex_valence_cache_8_bit_.size() == 0) {
69 vertex_valence_cache_8_bit_.resize(vertex_count.value());
71 vertex_valence_cache_8_bit_[v] =
static_cast<int8_t
>(
72 (std::min)(
static_cast<int32_t
>(std::numeric_limits<int8_t>::max()),
78 if (vertex_valence_cache_32_bit_.size() == 0) {
80 vertex_valence_cache_32_bit_.resize(vertex_count.value());
82 vertex_valence_cache_32_bit_[v] = table_.Valence(v);
96 DRACO_DCHECK_EQ(vertex_valence_cache_8_bit_.size(), table_.num_vertices());
97 if (v == kInvalidVertexIndex || v.value() >= table_.num_vertices()) {
104 DRACO_DCHECK_EQ(vertex_valence_cache_8_bit_.size(), table_.num_vertices());
105 return vertex_valence_cache_8_bit_[v];
110 DRACO_DCHECK_EQ(vertex_valence_cache_32_bit_.size(), table_.num_vertices());
111 if (v == kInvalidVertexIndex || v.value() >= table_.num_vertices()) {
119 vertex_valence_cache_8_bit_.clear();
124 vertex_valence_cache_32_bit_.clear();
130 return vertex_valence_cache_8_bit_.size() == 0 &&
131 vertex_valence_cache_32_bit_.size() == 0;
Definition draco_index_type_vector.h:32
void swap(IndexTypeVector< IndexTypeT, ValueTypeT > &arg)
Definition draco_index_type_vector.h:55
int8_t ConfidentValenceFromCacheInaccurate(CornerIndex c) const
Definition valence_cache.h:87
void ClearValenceCacheInaccurate() const
Definition valence_cache.h:118
int8_t ValenceFromCacheInaccurate(CornerIndex c) const
Definition valence_cache.h:38
int32_t ValenceFromCache(VertexIndex v) const
Definition valence_cache.h:109
int8_t ConfidentValenceFromCacheInaccurate(VertexIndex v) const
Definition valence_cache.h:102
int8_t ValenceFromCacheInaccurate(VertexIndex v) const
Definition valence_cache.h:95
void CacheValences() const
Definition valence_cache.h:77
int32_t ConfidentValenceFromCache(CornerIndex c) const
Definition valence_cache.h:91
int32_t ValenceFromCache(CornerIndex c) const
Definition valence_cache.h:44
void ClearValenceCache() const
Definition valence_cache.h:123
ValenceCache(const CornerTableT &table)
Definition valence_cache.h:35
int32_t ConfidentValenceFromCache(VertexIndex v) const
Definition valence_cache.h:51
void CacheValencesInaccurate() const
Definition valence_cache.h:66
bool IsCacheEmpty() const
Definition valence_cache.h:129
#define DRACO_DCHECK_LT(a, b)
Definition macros.h:86
#define DRACO_DCHECK_EQ(a, b)
Definition macros.h:81
#define DRACO_DCHECK_GE(a, b)
Definition macros.h:83
Definition attribute_octahedron_transform.cc:21
VertexIndex VertexIndex
Definition mesh_edgebreaker_encoder_impl.cc:37
CornerIndex CornerIndex
Definition mesh_edgebreaker_encoder_impl.cc:35