Commit 027a1365 authored by David Hendriks's avatar David Hendriks
Browse files

fixing the code to work with the deferring

parent 1624025f
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -3,7 +3,7 @@ snippets/
make_output.txt
tests/population/scaling/scaling_plots/*
tests/population/scaling/scaling_results/*

tests/json*
docs/build/*


+7 −4
Original line number Diff line number Diff line
@@ -42,16 +42,19 @@ int return_version_info(char ** const outstring,
                char ** const errorstring,
                size_t * const nbytes);


/* =================================================================== */
/* Functions to call other functionality                               */
/* =================================================================== */
long int return_store_memaddr(char * argstring, // TODO can we do this without argstring?
               char ** const buffer,

long int return_store_memaddr(char ** const buffer,
               char ** const error_buffer,
               size_t * const nbytes);

long int return_persistent_data_memaddr(char ** const buffer,
               char ** const error_buffer,
               size_t * const nbytes);

long int return_persistent_data_memaddr(char * argstring, // TODO can we do this without argstring?
int free_persistent_data_memaddr_and_return_json_output(long int persistent_data_memaddr,
               char ** const buffer,
               char ** const error_buffer,
               size_t * const nbytes);
+44 −54
Original line number Diff line number Diff line
@@ -61,6 +61,11 @@ static char return_store_memaddr_docstring[] =
static char return_persistent_data_memaddr_docstring[] = 
    "Return the store memory adress that will be passed to run_population";

static char free_persistent_data_memaddr_and_return_json_output_docstring[] = 
    "Frees the persistent_data memory and returns the json output";



static struct libbinary_c_store_t *store = NULL;

/* Initialize pyobjects */
@@ -84,7 +89,8 @@ static PyObject* binary_c_return_version_info(PyObject *self, PyObject *args);
static PyObject* binary_c_return_store_memaddr(PyObject *self, PyObject *args);
static PyObject* binary_c_return_persistent_data_memaddr(PyObject *self, PyObject *args);


// Free functions
static PyObject* binary_c_free_persistent_data_memaddr_and_return_json_output(PyObject *self, PyObject *args);

/* Set the module functions */
static PyMethodDef module_methods[] = {
@@ -107,7 +113,8 @@ static PyMethodDef module_methods[] = {
    {"return_version_info", binary_c_return_version_info, METH_VARARGS, return_version_info_docstring},

    {"return_store_memaddr", binary_c_return_store_memaddr, METH_VARARGS, return_store_memaddr_docstring},
    {"return_persistent_data_memaddr", binary_c_return_persistent_data_memaddr, METH_VARARGS, return_persistent_data_memaddr_docstring},
    {"return_persistent_data_memaddr", binary_c_return_persistent_data_memaddr, METH_NOARGS, return_persistent_data_memaddr_docstring},
    {"free_persistent_data_memaddr_and_return_json_output", binary_c_free_persistent_data_memaddr_and_return_json_output, METH_VARARGS, free_persistent_data_memaddr_and_return_json_output_docstring},

    {NULL, NULL, 0, NULL}
};
@@ -238,7 +245,7 @@ static PyObject* binary_c_run_system(PyObject *self, PyObject *args, PyObject *k
        return NULL;
    }

    printf("Input persistent_Data_memaddr: %lu\n", persistent_data_memaddr);
    // printf("Input persistent_Data_memaddr: %lu\n", persistent_data_memaddr);

    /* Call c-function */
    char * buffer;
@@ -398,19 +405,10 @@ static PyObject* binary_c_return_version_info(PyObject *self, PyObject *args)

static PyObject* binary_c_return_store_memaddr(PyObject *self, PyObject *args)
{
    /* Parse the input tuple */
    char *argstring;
    
    if(!PyArg_ParseTuple(args, "s", &argstring))
    {
        return NULL;
    }

    char * buffer;
    char * error_buffer;
    size_t nbytes;
    long int out MAYBE_UNUSED = return_store_memaddr(argstring,
                                      &buffer,
    long int out MAYBE_UNUSED = return_store_memaddr(&buffer,
                                      &error_buffer,
                                      &nbytes);

@@ -437,20 +435,10 @@ static PyObject* binary_c_return_store_memaddr(PyObject *self, PyObject *args)
static PyObject* binary_c_return_persistent_data_memaddr(PyObject *self, PyObject *args)
{
    /* Python binding that wraps the c function which calls the binary_c api endpoint. */

    /* Parse the input tuple */
    char *argstring;
    
    if(!PyArg_ParseTuple(args, "s", &argstring))
    {
        return NULL;
    }

    char * buffer;
    char * error_buffer;
    size_t nbytes;
    long int out MAYBE_UNUSED = return_persistent_data_memaddr(argstring,
                                      &buffer,
    long int out MAYBE_UNUSED = return_persistent_data_memaddr(&buffer,
                                      &error_buffer,
                                      &nbytes);

@@ -513,40 +501,42 @@ static PyObject* binary_c_return_persistent_data_memaddr(PyObject *self, PyObjec
//     return 0;
// }

// static PyObject* binary_c_free_persistent_data_memaddr(PyObject *self, PyObject *args)
// {
//     /* Python binding that calls the c function that free's the store memory */

//     /* Parse the input tuple */
//     char *persistent_data_memaddr;

//     if(!PyArg_ParseTuple(args, "l", &persistent_data_memaddr))
//     {
//         return NULL;
//     }
static PyObject* binary_c_free_persistent_data_memaddr_and_return_json_output(PyObject *self, PyObject *args)
{
    /* Python binding that calls the c function that free's the store memory */

//     char * buffer;
//     char * error_buffer;
//     size_t nbytes;
    /* Parse the input tuple */
    long int persistent_data_memaddr = -1;

//     long int out MAYBE_UNUSED = free_persistent_data_memaddr(persistent_data_memaddr,
//                                       &buffer,
//                                       &error_buffer,
//                                       &nbytes);
    if(!PyArg_ParseTuple(args, "l", &persistent_data_memaddr))
    {
        return NULL;
    }

//     /* copy the buffer to a python string */
//     PyObject * return_string MAYBE_UNUSED = Py_BuildValue("s", buffer);
//     PyObject * return_error_string MAYBE_UNUSED = Py_BuildValue("s", error_buffer);
    char * buffer;
    char * error_buffer;
    size_t nbytes;

//     if(error_buffer != NULL && strlen(error_buffer)>0)
//     {
//         fprintf(stderr,
//                 "Error in binary_c run : %s\n",
//                 error_buffer);
//     }
    long int out MAYBE_UNUSED = free_persistent_data_memaddr_and_return_json_output(persistent_data_memaddr,
                                      &buffer,
                                      &error_buffer,
                                      &nbytes);

//     Safe_free(buffer);
//     Safe_free(error_buffer);
    /* copy the buffer to a python string */
    PyObject * return_string MAYBE_UNUSED = Py_BuildValue("s", buffer);
    PyObject * return_error_string MAYBE_UNUSED = Py_BuildValue("s", error_buffer);

//     return 0;
// }
    if(error_buffer != NULL && strlen(error_buffer)>0)
    {
        fprintf(stderr,
                "Error in binary_c run : %s\n",
                error_buffer);
    }
    
    Safe_free(buffer);
    Safe_free(error_buffer);

    return return_string;
}
+95 −65
Original line number Diff line number Diff line
@@ -57,7 +57,7 @@ int run_system(char * argstring,
               size_t * const nbytes)
{
    /* memory for system */
    struct libbinary_c_stardata_t *stardata;
    struct libbinary_c_stardata_t *stardata = NULL;

    // Store:
    /* Check the value of the store_memaddr */
@@ -79,14 +79,15 @@ int run_system(char * argstring,
    {
        // load the persistent data from the long int that has been passed
        persistent_data = (void*)persistent_data_memaddr;
        printf("Took long int memaddr %ld and loaded it to %p\n", persistent_data_memaddr, (void*)&persistent_data);
    }
    else
    {
        printf("persistent_data memory adress was -1, now setting it to NULL\n");
        persistent_data = NULL;
    }

    /* make new stardata */
    stardata = NULL;
    /* Set up new system */
    binary_c_new_system(&stardata,          // stardata
                        NULL,               // previous_stardatas
                        NULL,               // preferences
@@ -141,6 +142,7 @@ int run_system(char * argstring,
    Boolean free_persistent_data = FALSE;
    if (persistent_data_memaddr == -1)
    {
        printf("Decided to free the persistent_data memaddr\n");
        Boolean free_persistent_data = TRUE;
    }

@@ -150,7 +152,7 @@ int run_system(char * argstring,
        TRUE,                       // free_stardata
        free_store,                 // free_store
        FALSE,                      // free_raw_buffer
        free_persistent_data        // free_persistent TODO: check if this is correct here
        free_persistent_data        // free_persistent
    );

    return 0;
@@ -165,12 +167,11 @@ int return_arglines(char ** const buffer,
               size_t * const nbytes)
{
    /* memory for N binary systems */
    struct libbinary_c_stardata_t *stardata;
    struct libbinary_c_stardata_t *stardata = NULL;
    struct libbinary_c_store_t *store = NULL;

    /* make new stardata */
    stardata = NULL;
    char *empty_str = "";

    /* Set up new system */
    binary_c_new_system(&stardata,          // stardata
                        NULL,               // previous_stardatas
                        NULL,               // preferences
@@ -180,7 +181,6 @@ int return_arglines(char ** const buffer,
                        -1                  // argc
    );


    /* disable logging */
    snprintf(stardata->preferences->log_filename,
             STRING_LENGTH-1,
@@ -210,7 +210,7 @@ int return_arglines(char ** const buffer,
        TRUE,                       // free_stardata
        TRUE,                       // free_store
        FALSE,                      // free_raw_buffer
        TRUE                        // free_persistent TODO: check if this is correct here
        TRUE                        // free_persistent
    );
    
    return 0;
@@ -222,12 +222,10 @@ int return_help_info(char * argstring,
               char ** const error_buffer,
               size_t * const nbytes)
{
    /* memory for N binary systems */
    struct libbinary_c_stardata_t *stardata;
    struct libbinary_c_stardata_t *stardata = NULL;
    struct libbinary_c_store_t *store = NULL;

    /* make new stardata */
    stardata = NULL;
    /* Set up new system */
    binary_c_new_system(&stardata,          // stardata
                        NULL,               // previous_stardatas
                        NULL,               // preferences
@@ -256,7 +254,7 @@ int return_help_info(char * argstring,
        TRUE,                       // free_stardata
        TRUE,                       // free_store
        FALSE,                      // free_raw_buffer
        TRUE                        // free_persistent TODO: check if this is correct here
        TRUE                        // free_persistent
    );

    return 0;
@@ -267,13 +265,11 @@ int return_help_all_info(char ** const buffer,
               char ** const error_buffer,
               size_t * const nbytes)
{
    /* memory for N binary systems */
    struct libbinary_c_stardata_t *stardata;
    struct libbinary_c_stardata_t *stardata = NULL;
    struct libbinary_c_store_t *store = NULL;

    /* make new stardata */
    stardata = NULL;
    char * empty_str = "";

    /* Set up new system */
    binary_c_new_system(&stardata,          // stardata
                        NULL,               // previous_stardatas
                        NULL,               // preferences
@@ -302,7 +298,7 @@ int return_help_all_info(char ** const buffer,
        TRUE,                       // free_stardata
        TRUE,                       // free_store
        FALSE,                      // free_raw_buffer
        TRUE                        // free_persistent TODO: check if this is correct here
        TRUE                        // free_persistent
    );

    return 0;
@@ -313,13 +309,11 @@ int return_version_info(char ** const buffer,
               char ** const error_buffer,
               size_t * const nbytes)
{
    /* memory for N binary systems */
    struct libbinary_c_stardata_t *stardata;
    struct libbinary_c_stardata_t *stardata = NULL;
    struct libbinary_c_store_t * store = NULL;

    /* make new stardata */
    stardata = NULL;
    char * empty_str = "";

    /* Set up new system */
    binary_c_new_system(&stardata,          // stardata
                        NULL,               // previous_stardatas
                        NULL,               // preferences
@@ -358,27 +352,24 @@ int return_version_info(char ** const buffer,
/* Functions to call other functionality                               */
/* =================================================================== */

long int return_store_memaddr(char * argstring,
               char ** const buffer,
long int return_store_memaddr(char ** const buffer,
               char ** const error_buffer,
               size_t * const nbytes)
{
    /* memory for N binary systems */
    struct libbinary_c_stardata_t *stardata;
    struct libbinary_c_stardata_t * stardata = NULL;
    struct libbinary_c_store_t * store = NULL;
    char * empty_str = "";

    /* make new stardata */
    stardata = NULL;
    /* Set up new system */
    binary_c_new_system(&stardata,          // stardata
                        NULL,               // previous_stardatas
                        NULL,               // preferences
                        &store,             // store
                        NULL,               // persistent_data
                        &argstring,         // argv
                        &empty_str,         // argv
                        -1                  // argc
    );


    /* output to strings */
    // stardata->preferences->internal_buffering = INTERNAL_BUFFERING_STORE;
    // stardata->preferences->batchmode = BATCHMODE_LIBRARY;
@@ -394,7 +385,7 @@ long int return_store_memaddr(char * argstring,
        TRUE,                       // free_preferences
        TRUE,                       // free_stardata
        FALSE,                      // free_store
        FALSE,                      // free_raw_buffer: TODO: possibly we have to do this yes
        FALSE,                      // free_raw_buffer
        TRUE                        // free_persistent
    );

@@ -408,25 +399,23 @@ long int return_store_memaddr(char * argstring,
}


long int return_persistent_data_memaddr(char * argstring,
               char ** const buffer,
long int return_persistent_data_memaddr(char ** const buffer,
               char ** const error_buffer,
               size_t * const nbytes)
{
    /* Function to allocate the persistent_data_memaddr */

    struct libbinary_c_stardata_t *stardata = NULL;
    struct libbinary_c_store_t * store = NULL;
    struct libbinary_c_persistent_data_t * persistent_data = NULL; 
    char * empty_str = "";

    /* make new stardata */
    stardata = NULL;
    /* Set up new system */
    binary_c_new_system(&stardata,          // stardata
                        NULL,               // previous_stardatas
                        NULL,               // preferences
                        &store,             // store
                        &persistent_data,   // persistent_data
                        &argstring,         // argv
                        &empty_str,         // argv
                        -1                  // argc
    );

@@ -438,15 +427,14 @@ long int return_persistent_data_memaddr(char * argstring,
        
    /* convert the pointer */
    uintptr_t persistent_data_memaddr_int = (uintptr_t)stardata->persistent_data; // C Version converting ptr to int
    // printf("persistent_data is at address: %p\n", (void*)stardata->persistent_data);
    // printf("persistent_data_memaddr_int: %lu\n", persistent_data_memaddr_int);
    printf("persistent_data is at address: %p persistent_data_memaddr_int: %ld\n", (void*)&stardata->persistent_data, persistent_data_memaddr_int);
    
    /* free stardata (except the buffer) */
    binary_c_free_memory(&stardata, // Stardata
        TRUE,                       // free_preferences
        TRUE,                       // free_stardata
        TRUE,                       // free_store
        FALSE,                      // free_raw_buffer: TODO: possibly we have to do this yes
        FALSE,                      // free_raw_buffer
        FALSE                       // free_persistent
    );

@@ -454,19 +442,61 @@ long int return_persistent_data_memaddr(char * argstring,
    return persistent_data_memaddr_int;
}

// /* Memory freeing functions */
// int free_store_memaddr(long int * store_memaddr,
//                char ** const buffer,
//                char ** const error_buffer,
//                size_t * const nbytes)
// {
int free_persistent_data_memaddr_and_return_json_output(long int persistent_data_memaddr,
               char ** const buffer,
               char ** const error_buffer,
               size_t * const nbytes)
{
    struct libbinary_c_store_t *store = NULL;
    struct libbinary_c_stardata_t *stardata = NULL;
    char * empty_str = "";

    // persistent_data:
    struct libbinary_c_persistent_data_t *persistent_data;
    if(persistent_data_memaddr != -1)
    {
        // load the persistent data from the long int that has been passed
        persistent_data = (void*)persistent_data_memaddr;
        printf("Took long int memaddr %ld and loaded it to %p\n", persistent_data_memaddr, (void*)&persistent_data);
    }
    else
    {
        printf("ERROR: this function needs a valid persistent_data_memaddr value. not -1\n");
        // persistent_data = NULL;
        // TODO: put break in the function here. 
    }

    /* Set up new system */
    binary_c_new_system(&stardata,          // stardata
                        NULL,               // previous_stardatas
                        NULL,               // preferences
                        &store,             // store
                        &persistent_data,   // persistent_data
                        &empty_str,         // argv
                        -1                  // argc
    );

    /* output to strings */
    stardata->preferences->internal_buffering = INTERNAL_BUFFERING_STORE;
    stardata->preferences->batchmode = BATCHMODE_LIBRARY;

    /* get output and free memory */
    binary_c_output_to_json(stardata);

    /* get buffer pointer */
    binary_c_buffer_info(stardata, buffer, nbytes);
    
//     return 0;
// }
    /* get error buffer pointer */
    binary_c_error_buffer(stardata, error_buffer);

// int free_persistent_data_memaddr
// {
    /* free the reststardata (except the buffer) */
    binary_c_free_memory(&stardata, // Stardata
        TRUE,                       // free_preferences
        TRUE,                       // free_stardata
        TRUE,                       // free_store
        FALSE,                      // free_raw_buffer
        FALSE                       // free_persistent
    );

// }
    return 0;
}
+216 −34

File changed.

Preview size limit exceeded, changes collapsed.