26 inline bool filterUndef(
const T* input,T* output,
int sz);
46 void unSetUdf(
void* ptr,
od_int64 idx)
const;
51 typedef bool (*IsUdfFunc)(
const void*,
od_int64 idx);
52 typedef void (*SetUdfFunc)(
void*,
od_int64 idx);
53 typedef void (*UnsetUdfFunc)(
void*,
od_int64 idx);
59 static bool isUdfUChar(
const void*,
od_int64);
60 static void setUdfUChar(
void*,
od_int64);
61 static void unsetUdfUChar(
void*,
od_int64);
63 static bool isUdfChar(
const void*,
od_int64);
64 static void setUdfChar(
void*,
od_int64);
65 static void unsetUdfChar(
void*,
od_int64);
67 static bool isUdfUShort(
const void*,
od_int64);
68 static void setUdfUShort(
void*,
od_int64);
69 static void unsetUdfUShort(
void*,
od_int64);
71 static bool isUdfShort(
const void*,
od_int64);
72 static void setUdfShort(
void*,
od_int64);
73 static void unsetUdfShort(
void*,
od_int64);
75 static bool isUdfUInt32(
const void*,
od_int64);
76 static void setUdfUInt32(
void*,
od_int64);
77 static void unsetUdfUInt32(
void*,
od_int64);
79 static bool isUdfInt32(
const void*,
od_int64);
80 static void setUdfInt32(
void*,
od_int64);
81 static void unsetUdfInt32(
void*,
od_int64);
83 static bool isUdfUInt64(
const void*,
od_int64);
84 static void setUdfUInt64(
void*,
od_int64);
85 static void unsetUdfUInt64(
void*,
od_int64);
87 static bool isUdfInt64(
const void*,
od_int64);
88 static void setUdfInt64(
void*,
od_int64);
89 static void unsetUdfInt64(
void*,
od_int64);
91 static bool isUdfFloat(
const void*,
od_int64);
92 static void setUdfFloat(
void*,
od_int64);
93 static void unsetUdfFloat(
void*,
od_int64);
95 static bool isUdfDouble(
const void*,
od_int64);
96 static void setUdfDouble(
void*,
od_int64);
97 static void unsetUdfDouble(
void*,
od_int64);
101 template <
class T>
inline 104 if ( !sz || !outptr )
return true;
106 const T* inptr = input.
arr();
115 return filterUndef( inptr ? inptr : myinp, outptr, sz );
119 template <
class T>
inline 122 if ( !sz )
return true;
124 T* outptr = output.
arr();
128 myoutp = outptr =
new T[sz];
134 output->setValues( outptr, sz );
140 template <
class T>
inline 146 int firstdefined = 0;
147 while ( firstdefined<sz &&
mIsUdf(input[firstdefined]) )
150 if ( firstdefined==sz )
153 for (
int idx=0; idx<=firstdefined; idx++ )
154 output[idx] = input[firstdefined];
156 if ( firstdefined==sz-1 )
159 int prevdefined = firstdefined;
160 int nextdefined = -1;
162 for (
int idx=firstdefined+1; idx<sz; )
164 if ( !
mIsUdf(input[idx]) )
167 output[idx] = input[idx];
174 while ( nextdefined<sz &&
mIsUdf(input[nextdefined]) )
179 if ( nextdefined==sz )
181 for (
int posidx = prevdefined+1; posidx<sz; posidx++ )
182 output[posidx] = input[prevdefined];
188 const T diff = input[nextdefined] - input[prevdefined];
189 const T unit = diff / (float)(nextdefined-prevdefined);
190 for (
int posidx = prevdefined+1; posidx<=nextdefined; posidx++ )
191 output[posidx] = input[prevdefined]+unit*(posidx-prevdefined);
193 prevdefined = nextdefined;
#define mExpClass(module)
Definition: commondefs.h:157
void getValues(ValueSeries< T > &, int64_t nrvals) const
Definition: valseries.h:126
#define mIsUdf(val)
Use mIsUdf to check for undefinedness of simple types.
Definition: undefval.h:285
#define od_int64
Definition: plftypes.h:34
Class that handles undefvalues in arrays that are in a format described by a BinDataDesc.
Definition: undefarray.h:37
IsUdfFunc isudf_
Definition: undefarray.h:55
Interface to a series of values.
Definition: odmemory.h:15
SetUdfFunc setudf_
Definition: undefarray.h:56
T & setUdf(T &u)
Definition: undefval.h:260
UnsetUdfFunc limitrange_
Definition: undefarray.h:57
bool filterUndef(const T *input, T *output, int sz)
Definition: undefarray.h:141
Description of binary data.
Definition: bindatadesc.h:41
bool isUdf(const T &t)
Definition: undefval.h:241
virtual T * arr()
Definition: valseries.h:48