00001
00002
00021 #include <stdio.h>
00022 #include <vector>
00023 #include "uti.h"
00024 #include "xalloc.h"
00025 #include "cbuffer.h"
00026
00027
00029
00224 class ParamDeltas
00225 {
00226
00227
00228
00229
00230
00231
00232
00233
00234
00235
00236
00237
00238
00239 public:
00240
00241 inline
00242 ParamDeltas ()
00243 : m_Ndim(0), m_bInit(false), m_pdDiff(NULL)
00244 {}
00245
00246
00253 inline
00254 ParamDeltas (INT Ndeltas, INT* windowSize, INT Ndim)
00255 { Initialize(Ndeltas, windowSize, Ndim); }
00256
00257 inline
00258 ~ParamDeltas()
00259 { if (m_pdDiff) xfree(m_pdDiff); }
00260
00262 void
00263 Initialize (INT Ndeltas, INT* windowSize, INT Ndim);
00264
00266 void
00267 Push (const DOUBLE* e);
00268
00270 INT
00271 Delay() const
00272 { return m_vMemBuffers[0].Size()-1; }
00273
00275 inline
00276 INT
00277 Ndim() const
00278 { return m_Ndim; }
00279
00281 inline
00282 INT
00283 Ndeltas() const
00284 { return m_vDeltaBuffers.size(); }
00285
00287 void
00288 Get(DOUBLE* e) const;
00289
00290
00291 protected:
00292
00294 void
00295 Populate (const DOUBLE* e);
00296
00297 protected:
00298 std::vector<buffer2D> m_vDeltaBuffers;
00299 std::vector<buffer2D> m_vMemBuffers;
00300 INT m_Ndim;
00301 bool m_bInit;
00302 DOUBLE* m_pdDiff;
00303
00304 };
00305
00306
00307
00308
00309
00311 void
00312 GetDiff ( const buffer2D& buffer, DOUBLE* diff );
00313
00315 DOUBLE
00316 GetDiff ( const buffer1D& buffer );
00317
00319
00326 inline
00327 void
00328 GetSample ( const buffer2D& buffer, DOUBLE* mid, INT n)
00329 { memcpy(mid, buffer[n], buffer.Dim()*sizeof(DOUBLE)); }
00330
00332
00341
00342
00349 inline
00350 DOUBLE
00351 GetSample ( const buffer1D& buffer, INT n)
00352 { return buffer[n]; }
00353
00354
00355
00356
00357
00358