-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathRtConfigs.h
121 lines (106 loc) · 4.22 KB
/
RtConfigs.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
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
#ifndef CONFIGS_H_INCLUDE_GUARD
#define CONFIGS_H_INCLUDE_GUARD
#include "utils.h"
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#define CFG_FLD_TRAINING_FILE_NAME TrainingFileName
#define CFG_FLD_TEST_FILE_NAME TestFileName
#define CFG_FLD_OUTPUT_FOLDER OutputFolder
#define CFG_FLD_TREE_COUNT TreeCount
#define CFG_FLD_MIN_SPLIT_COUNT MinSplitCount
#define CFG_FLD_MIN_ELEMS_IN_LEAF MinElemsInLeaf
#define CFG_FLD_MAX_FEATURES_PER_NODE MaxFeaturesPerNode
#define CFG_FLD_MAX_DEEPNESS MaxDeepness
#define CFG_FLD_TEST_EXTRACT_PERCENTAGE TestExtractPercentage
#define CFG_FLD_FORCE_TEST_EXTRACT ForceTestExtract
#define CFG_FLD_VOTING_TYPE VotingType
#define CFG_FLD_CV_TYPE CvType
#define CFG_OUTPUT_FOLDER ""
#define CFG_TREE_COUNT 30
#define CFG_MAX_FEATURE_PER_NODE 3
#define CFG_MAX_DEEPNESS 1
#define CFG_MIN_SPLIT_COUNT 2
#define CFG_MIN_ELEMS_IN_LEAF 1
#define CFG_TEST_FILE_NAME NULL
#define CFG_TEST_EXTRACT_PERCENTAGE 10
#define CFG_FORCE_TEST_EXTRACT 0
#define CFG_VOTING_TYPE 0
#define CFG_CV_TYPE 0
typedef struct RtConfigs RtConfigs;
struct RtConfigs
{
char* CFG_FLD_TRAINING_FILE_NAME;
char* CFG_FLD_TEST_FILE_NAME;
char* CFG_FLD_OUTPUT_FOLDER;
uint CFG_FLD_TREE_COUNT;
uint CFG_FLD_MAX_FEATURES_PER_NODE;
uint CFG_FLD_MAX_DEEPNESS;
uint CFG_FLD_MIN_SPLIT_COUNT;
uint CFG_FLD_MIN_ELEMS_IN_LEAF;
uint CFG_FLD_TEST_EXTRACT_PERCENTAGE;
uint CFG_FLD_FORCE_TEST_EXTRACT;
uint CFG_FLD_VOTING_TYPE;
uint CFG_FLD_CV_TYPE;
};
typedef struct
{
const char* ConfigName;
bool (*ConfigReader)(RtConfigs * config, const char* confStr);
const char* (*ConfigGetter)(const RtConfigs * config, char* buffer, uint bufferLen);
bool Editable;
const char* Description;
} RtConfigsSetUp;
RtConfigs* RtReadConfigFromFile(FILE* fp);
void RtPrintAllSettings(const RtConfigs* configs);
void RtSetUpPropertyFromString(RtConfigs*const configs, const char* str);
void RtFreeMemory(RtConfigs**const input);
#define RT_FLD_RDR_P(param) RT_FLD_RDR_F(param)
#define RT_FLD_RDR_F(param) bool RT_FLD_RDR_NAME(param)(RtConfigs * config, const char* confStr)
#define RT_FLD_RDR_F_CHAR(param) inline bool RT_FLD_RDR_NAME(param)(RtConfigs * config, const char* confStr)\
{\
config->param = MemCopyChars(confStr);\
return true;\
}
#define RT_FLD_RDR_F_INT_MAX_MIN(param, mx, mn, type) inline bool RT_FLD_RDR_NAME(param)(RtConfigs * config, const char* confStr)\
{\
const long value = strtol(confStr, NULL, 10);\
if (value >= (mn) && value <= (mx))\
{\
config->param = (type)value;\
return true;\
}\
return false;\
}
#define RT_FLD_RDR_NAME(param) Rt ## param ## Reader
#define RT_FLD_GET_P_CHAR(param) RT_FLD_GET_F_CHAR(param)
#define RT_FLD_GET_F_CHAR(param) inline const char* RT_FLD_GET_NAME(param)(const RtConfigs *const config, char*const buffer, const uint bufferLen)\
{\
return config->param;\
}
#define RT_FLD_GET_F_INT(param) inline const char* RT_FLD_GET_NAME(param)(const RtConfigs *const config, char*const buffer, const uint bufferLen)\
{\
sprintf_s(buffer, bufferLen,"%d", config->param);\
return buffer;\
}
#define RT_FLD_GET_NAME(param) Rt ## param ## Getter
#define RT_FLD_READER_GETTER_P_CHAR_CHAR(param) \
RT_FLD_RDR_F_CHAR(param)\
RT_FLD_GET_F_CHAR(param)
#define RT_FLD_READER_GETTER_P_INT_INT_MAX_MIN(param, mx, mn, type) \
RT_FLD_RDR_F_INT_MAX_MIN(param, mx, mn, type)\
RT_FLD_GET_F_INT(param)
RT_FLD_READER_GETTER_P_CHAR_CHAR(CFG_FLD_TRAINING_FILE_NAME)
RT_FLD_READER_GETTER_P_CHAR_CHAR(CFG_FLD_TEST_FILE_NAME)
RT_FLD_READER_GETTER_P_INT_INT_MAX_MIN(CFG_FLD_TREE_COUNT, INT_MAX, 1, uint)
RT_FLD_READER_GETTER_P_INT_INT_MAX_MIN(CFG_FLD_MAX_FEATURES_PER_NODE, INT_MAX, 1, uint)
RT_FLD_READER_GETTER_P_INT_INT_MAX_MIN(CFG_FLD_MAX_DEEPNESS, INT_MAX, 1, uint)
RT_FLD_READER_GETTER_P_CHAR_CHAR(CFG_FLD_OUTPUT_FOLDER)
RT_FLD_READER_GETTER_P_INT_INT_MAX_MIN(CFG_FLD_MIN_SPLIT_COUNT, INT_MAX, 2, uint)
RT_FLD_READER_GETTER_P_INT_INT_MAX_MIN(CFG_FLD_MIN_ELEMS_IN_LEAF, INT_MAX, 1, uint)
RT_FLD_READER_GETTER_P_INT_INT_MAX_MIN(CFG_FLD_TEST_EXTRACT_PERCENTAGE, 50, 1, uint)
RT_FLD_READER_GETTER_P_INT_INT_MAX_MIN(CFG_FLD_FORCE_TEST_EXTRACT, 1, 0, uint)
RT_FLD_READER_GETTER_P_INT_INT_MAX_MIN(CFG_FLD_VOTING_TYPE, 1, 0, uint)
RT_FLD_READER_GETTER_P_INT_INT_MAX_MIN(CFG_FLD_CV_TYPE, 10, 0, uint)
extern const RtConfigs* _glConfigs;
#endif