Exemplo n.º 1
0
int do_files_differ(
    const char* filename1,
    const char* filename2,
    bool* result_out
)
{
    if(!filename1 || !filename2 || !result_out)
    {
        return -1;
    }

    size_t file1size = 0;
    size_t file2size = 0;

    if(get_filesize(filename1, &file1size) || get_filesize(filename2, &file2size))
    {
        return -1;
    }

    if(file1size == file2size)
    {
        uint8_t* buffer1 = calloc(file1size, 1);
        uint8_t* buffer2 = calloc(file2size, 1);

        if(read_file_into_buffer(filename1, buffer1, file1size))
        {
            free(buffer1);
            free(buffer2);
            return -1;
        }
        if(read_file_into_buffer(filename2, buffer2, file2size))
        {
            free(buffer1);
            free(buffer2);
            return -1;
        }

        *result_out = (memcmp(buffer1, buffer2, file1size) != 0);
        free(buffer1);
        free(buffer2);
        return 0;
    }
    else
    {
        *result_out = true;
        return 0;
    }

    // Should not reach here
    return -1;
}
Exemplo n.º 2
0
int main(void) {
    char* buffer = read_file_into_buffer(FILEPATH);
    cuckoo_hash_table* ht = cuckoo_mult_init(6, 25);
    load_words_into_hashtable(ht, buffer, strlen(buffer));
    cuckoo_mult_print_table(ht);
    return 0;
}
Exemplo n.º 3
0
int SOMAexternal (SOMAsetup *ssetup, FitnessFunction ffunc, int nparams, Parameter *params, const char *file, SOMAreturn* sr) {
    Array2D array;
    char *buf;
    long len;
    struct csv_parser csvp;
    clock_t begin, end;
	
	array_init (&array);
	array_append_column(&array); //blank column for external fitness function
    array.currentcolumn++;

    //Parse CSV file
    if (csv_init (&csvp, CSV_APPEND_NULL)!=0)
        return ERR;

    if ((buf=read_file_into_buffer (file, &len))==NULL)
        return ERR_FILE;
    csv_parse (&csvp, buf, len, csvcallback1, csvcallback2e, (void*) &array);
    csv_fini (&csvp, csvcallback1, csvcallback2e, (void*) &array);
    csv_free (&csvp);

    //array_print (&array); //debug

    //soma_array=&array;
    //Initialize output struct
    SOMAreturn_init (sr, ssetup->Migrations, nparams);
    begin=clock();
    //SOMA call
    SOMA2 (ssetup, nparams, params, sr, &array, ffunc);
    end=clock();
    sr->time=(double) (end-begin)/CLOCKS_PER_SEC;
    array_delete (&array);

    return OK;
}
Exemplo n.º 4
0
int SOMAascii (SOMAsetup *ssetup, const char *expr, int nparams, Parameter *params, const char *file, SOMAreturn* sr) {
    Array2D array;
	int i;  
    char *buf;
    long len;
    struct csv_parser csvp;
    clock_t begin, end;
	MuExpr me;

	array_init(&array);

    //Parse CSV file
    if (csv_init (&csvp, CSV_APPEND_NULL)!=0)
        return ERR;

    if ((buf=read_file_into_buffer (file, &len))==NULL)
        return ERR_FILE;
    csv_parse (&csvp, buf, len, csvcallback1, csvcallback2, (void*) &array);
    csv_fini (&csvp, csvcallback1, csvcallback2, (void*) &array);
    csv_free (&csvp);

    //array_print (&array); //debug

    muexpr_init (&me, expr);

    for (i=0; i<nparams; i++) 
        if (defpar (&me, params+i, i)!=OK) {
            return ERR_PARAMS;
            array_delete (&array);
            muexpr_free (&me);
        }
    findvars (&me, VAR_NAME_PREFIX);

    //CVS file and expression don't match
    if (me.nvars!=array.ncolumns-1) {
        array_delete (&array);
        muexpr_free (&me);
        return ERR_COLUMNS;
    }

    muexpr_eval (&me);
    if (mupError (me.hparser)) {
        array_delete (&array);
        muexpr_free (&me);
        return ERR_EXPR;
    }

    //Initialize output struct
    SOMAreturn_init (sr, ssetup->Migrations, nparams);
    begin=clock();
    //SOMA call
    SOMA (ssetup, nparams, params, sr, &array, &me);
    end=clock();
    sr->time=(double) (end-begin)/CLOCKS_PER_SEC;
    array_delete (&array);
    muexpr_free (&me);

    return OK;
}
Exemplo n.º 5
0
int main (int argc, char **argv)
{

    int i;
    int tmp;
    struct list_element_t *temp_element_p;
    int opt;
    process_name = argv[0];

    pthread_mutex_init(&list_mtx, NULL);
    pthread_mutex_init(&data_ready_mtx, NULL);
    pthread_cond_init(&data_ready_cv, NULL);

    pthread_t thread_refs[MAX_NUM_PROCS];




    //get command line options
    while ((opt = getopt(argc, argv, "hP:c:f:eQ:R:")) != -1)
    {
        switch (opt) 
        {
            case 'c':
                command = optarg;
                break;
            case 'e':
                ensure_exit = 1;
                break;
            case 'f':
                if ( read_file_into_buffer(optarg,&command) == 0)
                {    
                    exit(2);
                }
                break;
            case 'P':
                num_procs = atoi(optarg);
                if (num_procs > MAX_NUM_PROCS) num_procs = MAX_NUM_PROCS; 
                break;
            case 'R':
                consumer_bottleneck_poll_interval = atoi(optarg);
                break;

            case 'Q':
                list_elements_per_proc = atoi(optarg);
                break;

            default:
                print_usage();
                fprintf(stderr,"Invalid option %c\n", opt);
                exit(2);
                break;

        }
    }


    //too many args or too few
    if (argc > optind || argc < 2)
    {
        print_usage();
        fprintf(stderr,"Invalid command line options\n");
    }

    //make sure there is a command to run
    if ( command == NULL )
    {
        fprintf(stderr, "You must specify a command to run\n");
        print_usage();
        exit(2);
    }

    if (consumer_bottleneck_poll_interval < 0)
    {
        print_usage();
        fprintf(stderr,"Invalid Wait Period\n");
        exit(2);    
    }

    if (list_elements_per_proc < 1)
    {
        print_usage();
        fprintf(stderr,"Invalid line buffer size\n");
        exit(2);    
    }

    if (num_procs < 1)
    {
        print_usage();
        fprintf(stderr,"Invalid number of processes\n");
        exit(2);    
    }


    num_list_elements = num_procs * list_elements_per_proc;

    //intialize the list elements and lists
    for (i = 0; i < num_list_elements; i++)
    {
        //malloc each element and set link
        temp_element_p = (struct list_element_t *) malloc(sizeof(struct list_element_t));
        if (temp_element_p == NULL)
        {     
            fprintf(stderr, "Malloc failed.\n");
            exit(2);
        }
        list_add(&free_list, temp_element_p);
    }

    //now start up the threads.


    for (i=0; i < num_procs; i++)
    {
        tmp = pthread_create(&thread_refs[i], NULL, writer_thread, NULL);    
        if (tmp != 0 )
        {    
            fprintf(stderr, "pthread create failed for proc %i with return value of: %i.\n", i, tmp);
            exit(2);
        }
    }





    grablock();
    temp_element_p = list_remove(&free_list);
    releaselock();

    //loop through each line of input
    while(fgets(temp_element_p->buffer, PATH_MAX, stdin) != NULL)
    {
        grablock();
        list_add(&ready_list, temp_element_p);
        temp_element_p = list_remove(&free_list);
        releaselock();

        signal_data_ready();

        //if we are backed up, signal again
        if (list_length(&free_list) < (num_list_elements/2))
        {
            broadcast_data_ready();
        }

        //wait if we don't have any free list elements available, keep signalling all the while
        while (temp_element_p == NULL)
        {
            usleep(consumer_bottleneck_poll_interval);
            broadcast_data_ready();
            grablock();
            temp_element_p = list_remove(&free_list);
            releaselock();
        }

    }

    //wait for ready_list to empty
    while(list_length(&ready_list) > 0)
    {
        signal_data_ready();
    }

    input_done = 1;


    //make sure no one is stuck on condition variable
    broadcast_data_ready();


    //fprintf(stderr, "Done processing input, finishing up\n");

    //join all the writer threads
    for (i = 0; i < num_procs; i++)
    {
        pthread_join(thread_refs[i], NULL);
    }

    exit(0);

}