1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147
|
#ifndef table_h
#define table_h
/*======================================================================*/
/*= CHANGES AND UPDATES =*/
/*======================================================================*/
/*= date person file subject =*/
/*=--------------------------------------------------------------------=*/
/*= =*/
/*= 260493 hua table.h created =*/
/*= =*/
/*======================================================================*/
#include "stdlib.h"
#include "stdio.h"
#include "string.h"
#include "errorhandling.h"
#include "xfile.h"
#include "lru.h"
#include "bool.h"
#include "io.h"
#include "objects.h"
/*----------------------------------------------------------------------*/
/* CLASS table (deklarations) */
/*----------------------------------------------------------------------*/
#define max_columns 20
#define max_rows 10000
#define rows_per_grab 10
#define col_type_int 1
#define col_type_float 2
#define col_type_text 3
#define col_type_point 4
#define col_type_cube 5
#define col_type_config 6
#define col_type_vector 7
#define col_type_plane 8
#define no_lru_candidate -1
class table
{public :
int number_of_columns;
int number_of_rows;
int column_length;
int id;
int data_size;
bool was_write_access;
bool is_lru;
int row_no;
lru *lru_queue;
int lru_size;
int column_type [max_columns];
int column_size [max_columns];
char column_name [max_columns][128];
int column_index [max_columns];
char *data;
char name [128];
char dir [128];
table (char dir [], char name [], bool &is_new, int lru_size = 0);
~table ();
void check_bound (int adr, int row_no, int column_no, char action []);
void save ();
void load ();
void rename (char new_dir [], char new_name []);
void rename (char new_name []);
void copy (table *destination);
int add_column (char name [], int type);
int column_no (char name []);
int num_columns ();
int candidate (bool &with_remove);
int freshest (int no);
int num_rows ();
int add_row ();
int insert_row (int row_no);
void delete_row (int row_no);
void clear ();
void access_row (int row_no);
int read_int (int row_no, int column_no);
float read_float (int row_no, int column_no);
char* read_text (int row_no, int column_no);
point read_point (int row_no, int column_no);
plane read_plane (int row_no, int column_no);
cube read_cube (int row_no, int column_no);
config read_config (int row_no, int column_no);
vector read_vector (int row_no, int column_no);
void write (int row_no, int column_no, int value);
void write (int row_no, int column_no, float value);
void write (int row_no, int column_no, double value);
void write (int row_no, int column_no, char value []);
void write (int row_no, int column_no, point value);
void write (int row_no, int column_no, plane value);
void write (int row_no, int column_no, cube value);
void write (int row_no, int column_no, config value);
void write (int row_no, int column_no, vector value);
int append (int column_no, int value);
int append (int column_no, float value);
int append (int column_no, double value);
int append (int column_no, char value []);
int append (int column_no, point value);
int append (int column_no, plane value);
int append (int column_no, cube value);
int append (int column_no, config value);
int append (int column_no, vector value);
};
/*----------------------------------------------------------------------*/
/* MODULE table handler (deklarations) */
/*----------------------------------------------------------------------*/
#define resident 0
#define paged 1
#define max_open_tables 5000
void open_table_handler (char global_table_dir [],
char local_table_dir []);
void close_table_handler (bool flush_buffers);
void dump_table_handler ();
void flush_table_handler ();
bool table_exists (char dir [], char name []);
table *table_open (char name [],
bool &is_new,
int paging_mode = paged,
int lru_size = 0);
void table_close (table *);
void table_rename (table *t, char new_name []);
void table_delete (table *t);
#endif
|