00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026 #ifndef DATABASE_H
00027 #define DATABASE_H
00028
00029 #define BACKUP_ARRAY_SIZE MAX_ARRAY_SIZE //size for array to be plotted, rest is truncated
00030
00031 #include <assert.h>
00032 #include <stdarg.h>
00033 #include <string.h>
00034 #include <stdio.h>
00035
00036
00037
00038 #include <vector.h>
00039 #include <list.h>
00040
00041
00042
00043 #include "qtincludes.h"
00044 #include "error.h"
00045 #include "data.h"
00046 #include "priority.h"
00047
00048
00049
00050
00051
00052 typedef struct VarType {
00053 int type;
00054 };
00055 typedef struct ArrayType {
00056 int size;
00057 int type;
00058 };
00059
00060
00061
00062
00063
00064
00065 class ImageListElement {
00066 friend class Database;
00067 public:
00068 QImage Image(void) const { return image; }
00069 private :
00070 ImageListElement(QImage *i,ImageListElement *I = 0) {
00071 image = i->copy();
00072 next = I;
00073 }
00074 ~ImageListElement() {
00075 }
00076 QImage image;
00077 ImageListElement *next;
00078 };
00079
00080
00081
00082
00083
00084
00085
00086 class Scalar_Vector_Element {
00087 friend class Database;
00088 public :
00089 ~Scalar_Vector_Element() { }
00090 Scalar_Vector_Element(int x ) { i_var = x;type =1; }
00091 Scalar_Vector_Element(double x) { d_var = x;type =2; }
00092 private :
00093 int type;
00094 int i_var;
00095 double d_var;
00096 };
00097
00098
00099
00100
00101
00102 class Array_Vector_Element {
00103 friend class Database;
00104 public :
00105 ~Array_Vector_Element() {
00106
00107
00108 }
00109 Array_Vector_Element(int x[],size_t size) {
00110 type = 1;
00111 i_vec.reserve(size);
00112 for (unsigned int i=0; i< size; i++) i_vec.push_back(x[i]);
00113
00114 }
00115 Array_Vector_Element(double x[],size_t size) {
00116 type = 2;
00117 d_vec.reserve(size);
00118 for (unsigned int i=0; i< size; i++) d_vec.push_back(x[i]);
00119
00120 }
00121 private :
00122 int type;
00123 vector<int> i_vec;
00124 vector<double> d_vec;
00125 };
00126
00127
00128
00129
00130 class Database {
00131
00132 public :
00133 Database();
00134 ~Database();
00135 void init();
00136 int maximal_integrations (void );
00137
00138
00139
00140 void add_data( int );
00141 void add_data( double );
00142 void add_data( char );
00143 void add_data( char * );
00144 void add_data( QImage * );
00145 vector<int> * add_data( int*,int );
00146 vector<double> * add_data( double *, int );
00147 void store ( int );
00148 void store ( double );
00149 void store ( int *,int);
00150 void store ( char * );
00151
00152
00153
00154 void turn_around(void );
00155 void arrayList_turn_around();
00156 void imageList_turn_around();
00157 void remove ( void );
00158 void remove ( int );
00159 void remove_1st ( void );
00160 void array_remove_1st( void );
00161 void array_remove (int );
00162 void printlist ( void );
00163 void save_data (const char *, VarType *,int);
00164 void save_arrays ( const char *, ArrayType *);
00165 void save_images ( const char *,int ,char *);
00166 void set_N_Elements (int );
00167 void set_N_Arrays(int);
00168 void set_MonMode(bool );
00169 int length_of_list( void );
00170 int length_of_arraylist( void );
00171 int length_of_imagelist( void );
00172 int maxarraylength();
00173 int array_empty ( void );
00174 int database_empty( void );
00175 int image_empty ( void );
00176 ImageListElement *end_of_image_list();
00177 private :
00178
00179
00180 PacketList *Que;
00181 dataPacket dat_packet;
00182 int max_channels;
00183 int max_integrations;
00184 int channels;
00185 int integrations;
00186 int priority;
00187 int stop ;
00188 int s_mode;
00189 int t_mode;
00190 int device_status;
00191 uint period;
00192 bool busy;
00193
00194
00195
00196 QList <Scalar_Vector_Element> Dlist;
00197 QList <Array_Vector_Element> Alist;
00198 vector<VarType> *Sc_Data;
00199 ImageListElement *Image;
00200
00201
00202 char *typelist;
00203 int var_index;
00204 int temp_var_index;
00205 int element_counter;
00206 int array_counter;
00207 int temp_counter;
00208 int array_temp_counter;
00209 int maxarraysize;
00210 int varcounter;
00211 int arraycounter;
00212 bool monitor_mode;
00213 int *z;
00214 double *zd;
00215
00216 };
00217
00218 #endif
00219