diff options
Diffstat (limited to 'new_R/src/syncrng.c')
| -rw-r--r-- | new_R/src/syncrng.c | 62 |
1 files changed, 47 insertions, 15 deletions
diff --git a/new_R/src/syncrng.c b/new_R/src/syncrng.c index 71fe58e..3a8cf68 100644 --- a/new_R/src/syncrng.c +++ b/new_R/src/syncrng.c @@ -117,33 +117,50 @@ void lfsr113_seed(uint32_t seed, uint64_t **state) * */ -static PyObject *syncrng_seed(PyObject *self, PyObject *args) +static PyObject *_syncrng_seed(PyObject *self, PyObject *args) { uint32_t seed; uint64_t *state = NULL; +<<<<<<< HEAD:new_R/src/syncrng.c +======= - if (!PyArg_ParseTuple(args, "k", &seed)) + PyObject *dblObj; +>>>>>>> python:new_python/src/_syncrng.c + + if (!PyArg_ParseTuple(args, "O", &dblObj)) return NULL; + seed = (uint32_t) PyLong_AsLong(dblObj); lfsr113_seed(seed, &state); - PyObject *pystate = Py_BuildValue("[k, k, k, k]", - state[0], state[1], state[2], state[3]); + PyObject *pystate = Py_BuildValue("[d, d, d, d, d]", + (double) state[0], + (double) state[1], + (double) state[2], + (double) state[3], + -1.0); free(state); return pystate; } -static PyObject *syncrng_rand(PyObject *self, PyObject *args) +static PyObject *_syncrng_rand(PyObject *self, PyObject *args) { +<<<<<<< HEAD:new_R/src/syncrng.c uint32_t i, value, numints; uint64_t *localstate; +======= + int i; + uint32_t rand; + uint64_t *localstate = malloc(sizeof(uint64_t) * 4); +>>>>>>> python:new_python/src/_syncrng.c PyObject *listObj; - PyObject *intObj; + PyObject *dblObj; if (!PyArg_ParseTuple(args, "O!", &PyList_Type, &listObj)) return NULL; +<<<<<<< HEAD:new_R/src/syncrng.c // we're just assuming you would never pass more than 4 values localstate = malloc(sizeof(uint32_t)*5); numints = PyList_Size(listObj); @@ -155,18 +172,29 @@ static PyObject *syncrng_rand(PyObject *self, PyObject *args) uint32_t rand = lfsr113(&localstate); localstate[4] = rand; +======= + for (i=0; i<4; i++) { + dblObj = PyList_GetItem(listObj, i); + localstate[i] = (uint64_t) PyFloat_AS_DOUBLE(dblObj); + } + + rand = lfsr113(&localstate); +>>>>>>> python:new_python/src/_syncrng.c - PyObject *pystate = Py_BuildValue("[k, k, k, k, k]", - localstate[0], localstate[1], localstate[2], - localstate[3], rand); + PyObject *pystate = Py_BuildValue("[d, d, d, d, d]", + (double) localstate[0], + (double) localstate[1], + (double) localstate[2], + (double) localstate[3], + (double) rand); free(localstate); return pystate; } static PyMethodDef SyncRNGMethods[] = { - {"seed", syncrng_seed, METH_VARARGS, + {"seed", _syncrng_seed, METH_VARARGS, "Seed the RNG."}, - {"rand", syncrng_rand, METH_VARARGS, + {"rand", _syncrng_rand, METH_VARARGS, "Generate a single random integer using SyncRNG."}, {NULL, NULL, 0, NULL} }; @@ -174,7 +202,7 @@ static PyMethodDef SyncRNGMethods[] = { #if PY_MAJOR_VERSION >= 3 static struct PyModuleDef moduledef = { PyModuleDef_HEAD_INIT, - "syncrng", + "_syncrng", "Python interface to SyncRNG", -1, SyncRNGMethods, @@ -194,7 +222,7 @@ moduleinit(void) #if PY_MAJOR_VERSION >= 3 m = PyModule_Create(&moduledef); #else - m = Py_InitModule3("syncrng", SyncRNGMethods, + m = Py_InitModule3("_syncrng", SyncRNGMethods, "Python interface to SyncRNG"); #endif @@ -203,13 +231,13 @@ moduleinit(void) #if PY_MAJOR_VERSION >= 3 PyMODINIT_FUNC -PyInit_syncrng(void) +PyInit__syncrng(void) { return moduleinit(); } #else PyMODINIT_FUNC -initsyncrng(void) +init_syncrng(void) { moduleinit(); } @@ -298,7 +326,11 @@ SEXP R_syncrng_rand(SEXP state) */ static uint32_t global_R_seed; +<<<<<<< HEAD:new_R/src/syncrng.c static int global_R_nseed = 1; +======= +static uint32_t global_R_nseed = 1; +>>>>>>> python:new_python/src/_syncrng.c static double global_R_result_uniform; static double global_R_result_normal; static uint64_t *global_R_state = NULL; |
