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