AILab-FOI/akdb

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:

image

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();
}