CARMA C++
ArrayDataFrameManagerIntegrator.h
Go to the documentation of this file.
1 // $Id: ArrayDataFrameManagerIntegrator.h,v 1.2 2011/09/27 03:56:58 eml Exp $
2 
3 #ifndef SZA_UTIL_ARRAYDATAFRAMEMANAGERINTEGRATOR_H
4 #define SZA_UTIL_ARRAYDATAFRAMEMANAGERINTEGRATOR_H
5 
16 
17 #define ADFM_INTEGRATE_FN(fn) void (fn)(unsigned nEl, DataType::Type type, void* fromPtr, void* toPtr, unsigned nAvg)
18 
19 namespace sza {
20  namespace util {
21 
22  class ArrayDataFrameManagerIntegrator {
23  public:
24 
25  struct Register {
26 
27  void* fromPtr_;
28  void* toPtr_;
29  ADFM_INTEGRATE_FN(*packFn_);
30  unsigned nEl_;
31  DataType::Type type_;
32 
33  Register();
34  virtual ~Register();
35  Register(const Register& reg);
36  Register(Register& reg);
37  void operator=(const Register& reg);
38  void operator=(Register& reg);
39 
40  };
41 
45  ArrayDataFrameManagerIntegrator();
46 
50  virtual ~ArrayDataFrameManagerIntegrator();
51 
52  void initialize(ArrayMapDataFrameManager* fromFrame, ArrayMapDataFrameManager* toFrame);
53 
54  void integrate();
55  void assign();
56 
57  void resetRunningAvgCounter();
58  void incrementRunningAvgCounter();
59 
60  unsigned getNFrameIntegrated();
61 
62  private:
63 
64  unsigned nAvg_;
65  std::vector<Register> regs_;
66 
67  // Sum two register values
68 
69  static ADFM_INTEGRATE_FN(addSum);
70 
71  // Add to the running average of a register
72 
73  static ADFM_INTEGRATE_FN(addRunningAverage);
74 
75  // Union two register values
76 
77  static ADFM_INTEGRATE_FN(addUnion);
78 
79  // Copy the last value of a register
80 
81  static ADFM_INTEGRATE_FN(addLast);
82 
83  // Copy the first value of a register
84 
85  static ADFM_INTEGRATE_FN(addFirst);
86 
87  }; // End class ArrayDataFrameManagerIntegrator
88 
89  } // End namespace util
90 } // End namespace sza
91 
92 
93 
94 #endif // End #ifndef SZA_UTIL_ARRAYDATAFRAMEMANAGERINTEGRATOR_H
Tagged: Wed Sep 1 03:59:25 UTC 2004.