-
Notifications
You must be signed in to change notification settings - Fork 1
/
table.h
77 lines (59 loc) · 2.31 KB
/
table.h
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
#ifndef table_h
#define table_h
#include "storable.cpp"
#include "error.cpp"
#include <vector>
#include <string>
#include <fstream>
using namespace std;
/*this is a generic class and represents in-memory database table*/
/*table can be of 'Vehicle' , 'User' , 'Trip'*/
template<class T> class Table
{
private:
/*Name of database file*/
string fileName;
/*files stream used for read and write data from database file*/
fstream fileStream;
/*Original data is stored here*/
/*'vector' is a container type and behaves like dynamic array*/
vector<Storable *> *records = NULL;
/*This is a private method*/
/*We will share pointer of record with recordId = 'recordId'*/
/*This is intentional and and hence kept as private method*/
T * getRefrenceOfRecordForId(long recordId) const throw
(NoSuchRecordError);
/*This is a private function . It is called after inserting new record or
updating data*/
/*This function writes data to a file*/
void writeToFile() throw (IOError);
/*
Add new record to database
input : fileName of Database
.this method can throw 'MemoryError' or 'IOError'*/
const T * const addNewRecord(T data) throw (MemoryError , IOError);
/*Update record in database
input : new Record of generic type 'T'
.This method can Throw IO error
*/
void updateRecord(T updatedRecord) throw
(IOError , NoSuchRecordError);
public:
/*Constructor:
Input: fileName of database*/
Table(string fileName) throw (MemoryError);
~Table();
/*get recordId for next record*/
long getNextRecordId() const;
/*get record for particular 'recordId'
input : recordId of record
We will return const T* const (constant pointer to constant record)
So user can not modify that record accidently
.This method can throw 'NoSuchRecord' Exception */
const T* const getRecordForId(long recordId) const throw(
NoSuchRecordError);
/*class database can use this class's private methods and vars*/
/*We will use 'getRefrencerecordForId' to get actual record refrence*/
friend class Database;
};
#endif