HCE project C++ developers source code library
1.1.1
HCE project developer library
Main Page
Namespaces
Classes
Files
File List
File Members
All
Classes
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Friends
Macros
AStorageHandler.h
Go to the documentation of this file.
1
#ifndef ASTORAGEHANDLER_H
2
#define ASTORAGEHANDLER_H
3
#include <stdio.h>
4
#include <sys/types.h>
5
#include <sys/stat.h>
6
#include <fcntl.h>
7
#include <stdarg.h>
8
#include <
string.h
>
9
#include <math.h>
10
#include <new>
11
#include <
BaseHandler.h
>
12
#include <THash.h>
13
#include <
CRC32.h
>
14
#include <
String.h
>
15
#include <Thread_t.h>
16
#include <
FileWriter.h
>
17
18
class
StorageData
19
{
20
public
:
21
StorageData
():
data
(NULL),
type
(NULL),
count
(0){}
22
StorageData
(
const
StorageData
&storageData)
23
{
24
count
= storageData.
count
;
25
data
= (
_Data
*)malloc(
sizeof
(
_Data
) *
count
);
26
type
= (
DataType
*)malloc(
sizeof
(
DataType
) *
count
);
27
memcpy(
data
, storageData.
data
,
sizeof
(
_Data
) *
count
);
28
memcpy(
type
, storageData.
type
,
sizeof
(
DataType
) * count);
29
}
30
~StorageData
()
31
{
32
if
(
data
)free(
data
);
33
if
(
type
)free(
type
);
34
}
35
void
init
(
int
count
)
36
{
37
this->count =
count
;
38
data
= (
_Data
*)malloc(
sizeof
(
_Data
) *
count
);
39
type
= (
DataType
*)malloc(
sizeof
(
DataType
) *
count
);
40
for
(
int
i = 0; i <
count
; i++)
type
[i] =
EMPTY
;
41
}
42
void
resize
(
int
count
)
43
{
44
data
= (
_Data
*)realloc(
data
,
sizeof
(
_Data
) *
count
);
45
type
= (
DataType
*)realloc(
type
,
sizeof
(
DataType
) *
count
);
46
for
(
int
i = this->count; i <
count
; i++)
type
[i] =
EMPTY
;
47
this->count =
count
;
48
}
49
StorageData
&
operator=
(
StorageData
&storageData)
50
{
51
if
(this->
data
)free(this->
data
);
52
if
(this->
type
)free(this->
type
);
53
init
(storageData.
count
);
54
memcpy(
data
, storageData.
data
,
sizeof
(
_Data
) *
count
);
55
memcpy(
type
, storageData.
type
,
sizeof
(
DataType
) * count);
56
return
*
this
;
57
}
58
enum
DataType
59
{
60
EMPTY
= 0,
INTEGER
,
REAL
,
STRING
61
};
62
union
_Data
63
{
64
long
long
integer
;
65
double
real
;
66
char
*
string
;
67
}*
data
;
68
DataType
*
type
;
69
int
count
;
70
};
71
72
class
StorageHash
:
public
THash<StorageData, String>
73
{
74
public
:
75
StorageHash
(
unsigned
long
count):THash<
StorageData
,
String
>(count){}
76
int
dump
(
const
char
* filename);
77
bool
load
(
const
char
* filename);
78
79
private
:
80
unsigned
long
hashFunc(
String
name){
return
crc.
calc
((
char
*)name.
c_str
(), name.
length
());}
81
void
destroyFunc(
String
name,
StorageData
data
)
82
{
83
for
(
int
i = 0; i < data.
count
; i++)
84
{
85
if
(data.
type
[i] ==
StorageData::STRING
)free(data.
data
[i].
string
);
86
}
87
}
88
CRC32
crc;
89
};
90
91
class
AStorageHandler
:
public
BaseHandler
92
{
93
public
:
94
AStorageHandler
():
BaseHandler
(102), hash(113){}
95
~AStorageHandler
(){hash.destroy();}
96
virtual
void
*
handle
(
char
code, ...);
97
void
setValue
(
const
char
*name,
long
long
value,
int
slot = 0);
98
void
setValue
(
const
char
*name,
double
value,
int
slot = 0);
99
void
setValue
(
const
char
*name,
const
char
*value,
int
slot = 0);
100
bool
addToValue
(
const
char
*name,
long
long
delta,
int
slot = 0);
101
bool
addToValue
(
const
char
*name,
double
delta,
int
slot = 0);
102
long
long
getInteger
(
const
char
*name,
int
slot = 0);
103
double
getFloat
(
const
char
*name,
int
slot = 0);
104
char
*
getString
(
const
char
*name,
int
slot = 0);
105
int
dump
(
const
char
* filename){
return
hash.
dump
(filename);}
106
bool
load
(
const
char
* filename)
107
{
108
long
long
oldStartDate =
getInteger
(
"StartDate"
);
109
bool
ok = hash.
load
(filename);
110
if
(oldStartDate)
111
{
112
setValue
(
"StartDate"
, oldStartDate);
113
}
114
return
ok;
115
}
116
117
protected
:
118
void
*
handle
(
char
code, va_list &list);
119
120
private
:
121
StorageHash
hash;
122
Mutex mutex;
123
};
124
#endif
sources
applicationFramework
src
AStorageHandler.h
Generated on Mon Jan 13 2014 13:08:35 for HCE project C++ developers source code library by
1.8.1.2