Zamijeniti konstante za imenovane konstante
Opened this issue · 2 comments
Problem:
Ovdje AK_Tarjan – test za DFS jako povezane čvorove pada zbog prekršenja UNIQUE i NOT NULL ograničenja
Magic number constants:
Iz ovog koda ne znamo što 1 označava, bolje bi bilo označiti 1 nekom simboličkom konstantom definiranom u constants.h
Provjeriti u čitavom kodu pojavljuju li se još takvih konstanti (alat grep može biti vrlo koristan u pretraživanju), popisati ih u komentaru na ovaj issue zajedno sa njihovim značenjem te (nakon pregleda nastavnika) imenovati u constants.h
Poštovani, javljam se za ovaj issue
U nastavku su navedeni dijelovi koda, po određenim fileovima, u kojima je moguće korištenje konstanti radi boljeg razumijevanja, ispod određenog koda napisan je prijedlog imena i dodavanja konstante te značenje konstante, ukoliko je za određeni dio konstanta već predložena u komentaru je prikazano koja bi konstanta bila prigodna za korištenje.
File: aggregation.c:
1]
void AK_agg_input_fix(AK_agg_input *input) {
int i = 0;
AK_PRO;
while ((*input).tasks[i] != -1) {
if ((*input).tasks[i] == AGG_TASK_AVG) {
AK_agg_input_add_to_beginning((*input).attributes[i], AGG_TASK_AVG_COUNT, input);
i++;
AK_agg_input_add_to_beginning((*input).attributes[i], AGG_TASK_AVG_SUM, input);
i++;
}
i++;
}
AK_EPI;
}
Prijedlog dodavanja u constants.h: AGG_TARGET_TASK -1
Značenje: Konstanta označava da je task dostigao željenu vrijednost
2]
if ( added_name_index != -1 ) {
counts[added_name_index]++;
sum_weights[added_name_index] += tmp_weight;
if ( tmp_weight < min_weights[added_name_index] ) { min_weights[added_name_index] = tmp_weight; }
if ( tmp_weight > max_weights[added_name_index] ) { max_weights[added_name_index] = tmp_weight; }
}
Prijedlog dodavanja u constants.h: #define name_already_added -1
Značenje: Konstanta označava da je uneseno ime nedostupno, odnosno već postoji
File: drop.c:
1]
int AK_drop(int type, AK_drop_arguments *drop_arguments) {
char *sys_table;
char *name;
int result;
AK_PRO;
switch (type) {
case DROP_TABLE:
sys_table = "AK_relation";
name = (char*) drop_arguments->value;
int status = 0;
int x = 0;
if (AK_if_exist(name, sys_table) == 0) {
printf("Table %s does not exist!\n", name);
} else {
for (x = 0; x < NUM_SYS_TABLES; x++) {
if (strcmp(name, system_catalog[x]) == 0) {
status = 1;
printf("Table %s is a System Catalog Table and can't be DROPPED!\n", name);
AK_EPI;
return EXIT_ERROR;
break;
}
}
if (status != 1) {
AK_drop_help_function(name, sys_table);
printf("TABLE %s DROPPED!\n", name);
AK_EPI;
return EXIT_SUCCESS;
}
}
Prijedlog dodavanja u constants.h: #define AK_table_dropped 1
Značenje: Konstanta označava da tablica ne može biti obrisana
File: auxilary.c:
1]
void AK_destroy_critical_section(AK_synchronization_info* info) {
if (info == NULL)
return;
if (info->init != 1)
return;
#ifdef _WIN32
DeleteCriticalSection(&info->critical_section);
#endif
#ifdef __linux__
pthread_mutex_destroy(&info->mutex);
#endif
AK_free(info);
info = NULL;
}
Prijedlog dodavanja u constants.h: #define AK_initialized 1
Značenje: Konstanta označava da je inicijalizirani objekt za sinkronizaciju
2}
void AK_enter_critical_section(AK_synchronization_info* info) {
assert(info != NULL && info->init == 1); /* #define AK_initialized 1 */
#ifdef __linux__
pthread_mutex_lock(&info->mutex);
#endif
#ifdef _WIN32
EnterCriticalSection(&info->critical_section);
#endif
while (info->ready != 1); /* wait loop */
info->ready = 0;
#ifdef __linux__
pthread_mutex_unlock(&info->mutex);
#endif
#ifdef _WIN32
LeaveCriticalSection(&info->critical_section);
#endif
}
Prijedlog dodavanja u constants.h: #define AK_critical_section_entered 1
Značenje: Konstanta označava da je pristupljeno kritičnoj sekciji
3]
void AK_leave_critical_section(AK_synchronization_info* info) {
assert(info != NULL && info->init == 1); /* #define AK_initialized 1 */
info->ready = 1;
}
4]
void AK_leave_critical_section(AK_synchronization_info* info) {
assert(info != NULL && info->init == 1); /* #define AK_initialized 1 */
info->ready = 1;
}
File: mempro.c:
1]
void AK_debmod_d(AK_debmod_state* ds, const char *message){
#if AK_DEBMOD_ON & AK_DEBMOD_PRINT
clock_t t;
assert(ds != NULL && ds->init == 1);
if (ds->print == 0){
return;
}
t = clock();
fprintf(stderr, "[DEBMOD %p] %ld %s", (void*)ds, t, message);
fflush(stderr);
#endif
}
Prijedlog dodavanja u constants.h: #define AK_debmode_state_initialized 1
Značenje: Konstanta označava da je inicijaliziran debug mode
2]
void AK_debmod_sample_state(AK_debmod_state* ds) {
uint32_t i;
assert(ds != NULL && ds->init == 1); /* #define AK_debmode_state_initialized 1 */
AK_debmod_enter_critical_sec(ds);
for (i = 0; i < AK_DEBMOD_PAGES_NUM; ++i) {
if (ds->unlocked[i] == 1) {
assert(mprotect(ds->page[i], AK_DEBMOD_STATE->real[i],
PROT_READ) == 0);
ds->unlocked[i] = 0;
}
}
AK_debmod_leave_critical_sec(ds);
}
#endif
Prijedlog dodavanja u constants.h: #define AK_debmode_state_entered 1
Značenje: Konstanta označava da je pristupljeno debug modeu
3]
void AK_debmod_enter_critical_sec(AK_debmod_state* ds){
assert(ds != NULL && ds->init == 1); /* #define AK_debmode_state_initialized 1 */
#ifdef _WIN32
EnterCriticalSection(&ds->critical_section);
#endif
#ifdef __linux__
pthread_mutex_lock(&AK_debmod_critical_section);
#endif
while (ds->ready != 1); /* wait loop */
ds->ready = 0;
#ifdef _WIN32
LeaveCriticalSection(&ds->critical_section);
#endif
#ifdef __linux__
pthread_mutex_unlock(&AK_debmod_critical_section);
#endif
}
4]
int32_t AK_debmod_func_id(AK_debmod_state* ds, const char *func_name){
int32_t i;
assert(ds != NULL && ds->init == 1); /* #define AK_debmode_state_initialized 1 */
assert(ds->last_function_id < AK_DEBMOD_MAX_FUNCTIONS);
assert(func_name != NULL);
if (ds->last_function_id == -1){
return -1;
}
for (i = 0; i <= ds->last_function_id; ++i){
if (strncmp(func_name, ds->function[i], AK_DEBMOD_MAX_FUNC_NAME) == 0){
return i;
}
}
return -1;
}
Prijedlog dodavanja u constants.h: #define AK_target_id -1
Značenje: Konstanta označava da je dohvaćen ciljani id
5]
const char * AK_debmod_func_get_name(AK_debmod_state* ds,
int32_t function_id){
assert(ds != NULL && ds->init == 1); /* #define AK_debmode_state_initialized 1 */
if (function_id < 0){
return "unknown_function";
}
assert(function_id < AK_DEBMOD_MAX_FUNCTIONS);
return ds->function[function_id];
}
Prijedlog dodavanja u constants.h: #define non_existent_function 0
Značenje: Konstanta označava da funkcija ne postoji, odnosno sustav ju ne prepoznaje
6]
void AK_debmod_function_prologue(const char *func_name,
const char *source_file, int source_line){
int32_t id;
if (AK_DEBMOD_STATE == NULL || AK_DEBMOD_STATE->init != 1){ /* #define AK_debmode_state_initialized 1 */
AK_DEBMOD_STATE = AK_debmod_init();
if (AK_DEBMOD_STATE == NULL || AK_DEBMOD_STATE->init != 1){ /* #define AK_debmode_state_initialized 1 */
return;
}
}
AK_debmod_enter_critical_sec(AK_DEBMOD_STATE);
id = AK_debmod_func_id(AK_DEBMOD_STATE, func_name);
if (id == -1){
id = AK_debmod_func_add(AK_DEBMOD_STATE, func_name);
}
AK_debmod_function_current(AK_DEBMOD_STATE, id);
AK_debmod_leave_critical_sec(AK_DEBMOD_STATE);
}
Prijedlog dodavanja u constants.h: #define new_func_id -1
Značenje: Konstanta označava da nova funkcija može biti dodana
7]
void AK_debmod_function_epilogue(const char *func_name,
const char *source_file, int source_line){
int32_t id;
if (AK_DEBMOD_STATE == NULL || AK_DEBMOD_STATE->init != 1){ /* #define AK_debmode_state_initialized 1 */
AK_DEBMOD_STATE = AK_debmod_init();
if (AK_DEBMOD_STATE == NULL || AK_DEBMOD_STATE->init != 1){ /* #define AK_debmode_state_initialized 1 */
return;
}
}
AK_debmod_enter_critical_sec(AK_DEBMOD_STATE);
id = AK_debmod_func_id(AK_DEBMOD_STATE, func_name);
assert(id != -1); /* #define new_func_id -1 */
AK_debmod_fstack_pop(AK_DEBMOD_STATE);
AK_debmod_log_memory_alloc(id);
AK_debmod_leave_critical_sec(AK_DEBMOD_STATE);
AK_check_for_writes();
}