35 #ifndef OPENIMAGEIO_VARYINGREF_H
36 #define OPENIMAGEIO_VARYINGREF_H
132 VaryingRef () { init (0, 0); }
138 VaryingRef (
void *ptr_,
int step_=0) { init ((T *)ptr_,step_); }
142 VaryingRef (T &ptr_) { init (&ptr_, 0); }
148 void init (T *ptr_,
int step_=0) {
155 const VaryingRef & operator= (T &ptr_) { init (&ptr_);
return *
this; }
159 bool is_null ()
const {
return (m_ptr == 0); }
163 operator void*()
const {
return m_ptr; }
167 bool is_varying ()
const {
return (m_step != 0); }
171 bool is_uniform ()
const {
return (m_step == 0); }
177 VaryingRef & operator++ () {
178 char *p = (
char *)m_ptr;
187 void operator++ (
int) {
189 char *p = (
char *)m_ptr;
197 T & operator* ()
const {
return *m_ptr; }
202 T & operator[] (
int i)
const {
return *(T *) ((
char *)m_ptr + i*m_step); }
206 T * ptr ()
const {
return m_ptr; }
210 int step ()
const {
return m_step; }
222 VaryingRef<T>
Varying (T *x) {
return VaryingRef<T> (x,
sizeof(T)); }
227 VaryingRef<T>
Uniform (T *x) {
return VaryingRef<T> (x, 0); }
232 VaryingRef<T>
Uniform (T &x) {
return VaryingRef<T> (&x, 0); }
238 #endif // OPENIMAGEIO_VARYINGREF_H