OpenSubdiv
Toggle main menu visibility
Loading...
Searching...
No Matches
array.h
Go to the documentation of this file.
1
//
2
// Copyright 2014 DreamWorks Animation LLC.
3
//
4
// Licensed under the terms set forth in the LICENSE.txt file available at
5
// https://opensubdiv.org/license.
6
//
7
#ifndef OPENSUBDIV3_VTR_ARRAY_INTERFACE_H
8
#define OPENSUBDIV3_VTR_ARRAY_INTERFACE_H
9
10
#include "../version.h"
11
12
#include <cassert>
13
14
namespace
OpenSubdiv
{
15
namespace
OPENSUBDIV_VERSION
{
16
17
namespace
Vtr
{
18
19
//
20
// This class provides a simple array-like interface -- a subset std::vector's interface -- for
21
// a sequence of elements stored in contiguous memory. It provides a unified representation for
22
// referencing data on the stack, all or a subset of std::vector<>, or anywhere else in memory.
23
//
24
// Note that its members are head/size rather than begin/end as in std::vector -- we frequently
25
// need only the size for many queries, and that is most often what is stored elsewhere in other
26
// classes, so we hope to reduce unnecessary address arithmetic constructing the interface and
27
// accessing the size. The size type is also specifically 32-bit (rather than size_t) to match
28
// internal usage and avoid unnecessary conversion to/from 64-bit.
29
//
30
// Question:
31
// Naming is at issue here... formerly called ArrayInterface until that was shot down it has
32
// been simplified to Array but needs to be distanced from std::array as it DOES NOT store its
33
// own memory and is simply an interface to memory stored elsewhere.
34
//
35
template
<
typename
TYPE>
36
class
ConstArray
{
37
38
public
:
39
typedef
TYPE
value_type
;
40
typedef
int
size_type
;
41
42
typedef
TYPE
const
&
const_reference
;
43
typedef
TYPE
const
*
const_iterator
;
44
45
typedef
TYPE&
reference
;
46
typedef
TYPE*
iterator
;
47
48
public
:
49
50
ConstArray
() :
_begin
(0),
_size
(0) { }
51
52
ConstArray
(
value_type
const
* ptr,
size_type
sizeArg) :
53
_begin
(ptr),
_size
(sizeArg) { }
54
55
size_type
size
()
const
{
return
_size
; }
56
57
bool
empty
()
const
{
return
_size
==0; }
58
59
const_reference
operator[]
(
int
index)
const
{
return
_begin
[index]; }
60
const_iterator
begin
()
const
{
return
_begin
; }
61
const_iterator
end
()
const
{
return
_begin
+
_size
; }
62
63
size_type
FindIndexIn4Tuple
(
value_type
value)
const
{
64
assert(
_size
>=4);
65
if
(value ==
_begin
[0])
return
0;
66
if
(value ==
_begin
[1])
return
1;
67
if
(value ==
_begin
[2])
return
2;
68
if
(value ==
_begin
[3])
return
3;
69
assert(
"FindIndexIn4Tuple() did not find expected value!"
== 0);
70
return
-1;
71
}
72
73
size_type
FindIndex
(
value_type
value)
const
{
74
for
(
size_type
i=0; i<
size
(); ++i) {
75
if
(value==
_begin
[i]) {
76
return
i;
77
}
78
}
79
return
-1;
80
}
81
82
protected
:
83
value_type
const
*
_begin
;
84
size_type
_size
;
85
};
86
87
template
<
typename
TYPE>
88
class
Array
:
public
ConstArray
<TYPE> {
89
90
public
:
91
typedef
TYPE
value_type
;
92
typedef
int
size_type
;
93
94
typedef
TYPE
const
&
const_reference
;
95
96
typedef
TYPE&
reference
;
97
typedef
TYPE*
iterator
;
98
99
public
:
100
101
Array
() :
ConstArray
<TYPE>() { }
102
103
Array
(
value_type
* ptr,
size_type
sizeArg) :
ConstArray
<TYPE>(ptr, sizeArg) { }
104
105
public
:
106
107
const_reference
operator[]
(
int
index)
const
{
108
return
ConstArray<TYPE>::_begin
[index];
109
}
110
111
reference
operator[]
(
int
index) {
112
return
const_cast<
reference
>
(
ConstArray<TYPE>::_begin
[index]);
113
}
114
115
iterator
begin
() {
116
return
const_cast<
iterator
>
(
ConstArray<TYPE>::_begin
);
117
}
118
119
iterator
end
() {
120
return
const_cast<
iterator
>
(
ConstArray<TYPE>::_begin
+
121
ConstArray<TYPE>::_size
);
122
}
123
};
124
125
}
// end namespace Vtr
126
127
}
// end namespace OPENSUBDIV_VERSION
128
using namespace
OPENSUBDIV_VERSION;
129
}
// end namespace OpenSubdiv
130
131
#endif
/* OPENSUBDIV3_VTR_ARRAY_INTERFACE_H */
OpenSubdiv
Definition
limits.h:15
OpenSubdiv::OPENSUBDIV_VERSION
Definition
limits.h:16
OpenSubdiv::OPENSUBDIV_VERSION::Vtr
Definition
topologyRefiner.h:23
OpenSubdiv::OPENSUBDIV_VERSION::Vtr::ConstArray< int >::_begin
value_type const * _begin
Definition
array.h:83
OpenSubdiv::OPENSUBDIV_VERSION::Vtr::ConstArray< int >::value_type
int value_type
Definition
array.h:39
OpenSubdiv::OPENSUBDIV_VERSION::Vtr::ConstArray::begin
const_iterator begin() const
Definition
array.h:60
OpenSubdiv::OPENSUBDIV_VERSION::Vtr::ConstArray::operator[]
const_reference operator[](int index) const
Definition
array.h:59
OpenSubdiv::OPENSUBDIV_VERSION::Vtr::ConstArray< int >::const_iterator
int const * const_iterator
Definition
array.h:43
OpenSubdiv::OPENSUBDIV_VERSION::Vtr::ConstArray::FindIndexIn4Tuple
size_type FindIndexIn4Tuple(value_type value) const
Definition
array.h:63
OpenSubdiv::OPENSUBDIV_VERSION::Vtr::ConstArray::size
size_type size() const
Definition
array.h:55
OpenSubdiv::OPENSUBDIV_VERSION::Vtr::ConstArray::empty
bool empty() const
Definition
array.h:57
OpenSubdiv::OPENSUBDIV_VERSION::Vtr::ConstArray::ConstArray
ConstArray(value_type const *ptr, size_type sizeArg)
Definition
array.h:52
OpenSubdiv::OPENSUBDIV_VERSION::Vtr::ConstArray< int >::reference
int & reference
Definition
array.h:45
OpenSubdiv::OPENSUBDIV_VERSION::Vtr::ConstArray< int >::_size
size_type _size
Definition
array.h:84
OpenSubdiv::OPENSUBDIV_VERSION::Vtr::ConstArray::FindIndex
size_type FindIndex(value_type value) const
Definition
array.h:73
OpenSubdiv::OPENSUBDIV_VERSION::Vtr::ConstArray< int >::size_type
int size_type
Definition
array.h:40
OpenSubdiv::OPENSUBDIV_VERSION::Vtr::ConstArray< int >::const_reference
int const & const_reference
Definition
array.h:42
OpenSubdiv::OPENSUBDIV_VERSION::Vtr::ConstArray::end
const_iterator end() const
Definition
array.h:61
OpenSubdiv::OPENSUBDIV_VERSION::Vtr::ConstArray< int >::iterator
int * iterator
Definition
array.h:46
OpenSubdiv::OPENSUBDIV_VERSION::Vtr::ConstArray::ConstArray
ConstArray()
Definition
array.h:50
OpenSubdiv::OPENSUBDIV_VERSION::Vtr::Array< PatchParam >::value_type
PatchParam value_type
Definition
array.h:91
OpenSubdiv::OPENSUBDIV_VERSION::Vtr::Array::operator[]
const_reference operator[](int index) const
Definition
array.h:107
OpenSubdiv::OPENSUBDIV_VERSION::Vtr::Array< PatchParam >::reference
PatchParam & reference
Definition
array.h:96
OpenSubdiv::OPENSUBDIV_VERSION::Vtr::Array< PatchParam >::size_type
int size_type
Definition
array.h:92
OpenSubdiv::OPENSUBDIV_VERSION::Vtr::Array< PatchParam >::const_reference
PatchParam const & const_reference
Definition
array.h:94
OpenSubdiv::OPENSUBDIV_VERSION::Vtr::Array::end
iterator end()
Definition
array.h:119
OpenSubdiv::OPENSUBDIV_VERSION::Vtr::Array::begin
iterator begin()
Definition
array.h:115
OpenSubdiv::OPENSUBDIV_VERSION::Vtr::Array::Array
Array(value_type *ptr, size_type sizeArg)
Definition
array.h:103
OpenSubdiv::OPENSUBDIV_VERSION::Vtr::Array< PatchParam >::iterator
PatchParam * iterator
Definition
array.h:97
OpenSubdiv::OPENSUBDIV_VERSION::Vtr::Array::operator[]
reference operator[](int index)
Definition
array.h:111
OpenSubdiv::OPENSUBDIV_VERSION::Vtr::Array::Array
Array()
Definition
array.h:101
opensubdiv
vtr
array.h
Generated on
for OpenSubdiv by
1.18.0