My Project
 All Classes Files Functions Variables Enumerations Enumerator Friends Macros Pages
ArchiverWriterDirfile.h
1 #ifndef GCP_UTIL_ARCHIVERWRITERDIRFILE_H
2 #define GCP_UTIL_ARCHIVERWRITERDIRFILE_H
3 
11 #include "gcp/util/common/ArchiverWriter.h"
12 
13 #include <list>
14 #include <string>
15 #include <vector>
16 
17 #include <unistd.h>
18 
19 class ArrayMap;
20 class ArrRegMap;
21 class RegMapBlock;
22 
23 namespace gcp {
24  namespace util {
25 
27  public:
28 
29  // ArchiverWriterDirfil will maintain an array of objects of the
30  // following type, one per archived register.
31 
32  struct Register {
33 
34  // The name of the file in which this register will be written
35 
36  std::string name_;
37 
38  // A pointer to the beginning of the memory for this register
39  // value in the Archiver frame buffer
40 
41  void* ptr_;
42 
43  // The byte offset into the frame of this register
44 
45  unsigned byteOffset_;
46 
47  // The number of bytes in this register block
48 
49  unsigned nByte_;
50 
51  unsigned nBytePerEl_;
52 
53  // The number of elements in this register block
54 
55  unsigned nEl_;
56 
57  // A file descriptor associated with the currently open file
58  // corresponding to this register
59 
60  int fd_;
61 
62  // The number of elements we will buffer before writing
63 
64  unsigned nBuffer_;
65 
66  // The current sample
67 
68  unsigned iBuffer_;
69 
70  // A format string for this register
71 
72  std::string format_;
73 
74  // A pointer to the descriptor for this register
75 
76  RegMapBlock* block_;
77 
78  // A buffer for data
79 
80  std::vector<unsigned char> bytes_;
81 
82  // Constructors
83 
84  Register(RegMapBlock* block,
85  ArrRegMap* arrRegMap,
86  unsigned startEl,
87  unsigned nEl,
88  unsigned char* base,
89  bool writeIndex,
90  unsigned nBuffer);
91 
92  Register(const Register& reg);
93 
94  virtual ~Register();
95 
96  // Open a file for this register in the specified directory
97 
98  int open(char* dir);
99 
100  // Close the file associated with this register
101 
102  void close();
103 
104  // Flush the file associated with this register
105 
106  void flush();
107 
108  // Write the current value of this register
109 
110  int write();
111 
112  // A format string for this register
113 
114  std::string format();
115  };
116 
120  ArchiverWriterDirfile(unsigned nBuffer=1);
121 
122  void initialize(ArrayMap* arrayMap, unsigned char* basePtr,
123  unsigned nBuffer);
124 
125  void mapRegisters(ArrayMap* arrayMap,
126  unsigned char* basePtr,
127  unsigned nBuffer);
128 
132  ArchiverWriterDirfile(const ArchiverWriterDirfile& objToBeCopied);
133 
138 
142  void operator=(const ArchiverWriterDirfile& objToBeAssigned);
143 
147  void operator=(ArchiverWriterDirfile& objToBeAssigned);
148 
152  virtual ~ArchiverWriterDirfile();
153 
154  // Overloaded methods of the base class that will be called by
155  // the Archiver parent
156 
157  int openArcfile(std::string dir);
158  void closeArcfile();
159  void flushArcfile();
160  int writeIntegration();
161  bool isOpen();
162 
163  protected:
164 
165  // This is the number of samples we will buffer before writing to disk
166 
167  unsigned nBuffer_;
168 
169  unsigned maxlen_;
170 
171  // True if archive files are currently open
172 
173  bool isOpen_;
174 
175  // The list of registers
176 
177  std::list<Register> registers_;
178 
179  // The base directory in which we are working
180 
181  std::string dirname_;
182 
183  // Insert a register
184 
185  void insert(RegMapBlock* block,
186  ArrRegMap* arrRegMap,
187  unsigned char* basePtr,
188  unsigned nBuffer);
189 
190  // Insert a block of register elements into the list
191 
192  void insertReg(RegMapBlock* block,
193  ArrRegMap* arrRegMap,
194  unsigned startEl,
195  unsigned nEl,
196  unsigned char* basePtr,
197  bool writeIndex,
198  unsigned nBuffer);
199 
200  // Create the directory for the current set of archive files
201 
202  int createDir(char* dir);
203 
204  // Write the format file needed for things like KST
205 
206  int outputFormatFile(char* dir);
207 
208  }; // End class ArchiverWriterDirfile
209 
210  } // End namespace util
211 } // End namespace gcp
212 
213 
214 #endif // End #ifndef GCP_UTIL_ARCHIVERWRITERDIRFILE_H
virtual ~Register()
Definition: ArchiverWriterDirfile.cc:435
void mapRegisters(ArrayMap *arrayMap, unsigned char *basePtr, unsigned nBuffer)
Definition: ArchiverWriterDirfile.cc:52
void operator=(const ArchiverWriterDirfile &objToBeAssigned)
Definition: arraymap.h:63
Definition: ArchiverWriterDirfile.h:32
void initialize(ArrayMap *arrayMap, unsigned char *basePtr, unsigned nBuffer)
Definition: ArchiverWriterDirfile.cc:39
Definition: ArchiverWriterDirfile.h:26
ArchiverWriterDirfile(unsigned nBuffer=1)
Definition: ArchiverWriter.h:16
Definition: arraymap.h:177