Revision: 463
http://rpy.svn.sourceforge.net/rpy/?rev=463&view=rev
Author: lgautier
Date: 2008-03-23 15:08:42 -0700 (Sun, 23 Mar 2008)
Log Message:
-----------
Implemented "len()" for SexpEnvironment
Modified Paths:
--------------
branches/rpy_nextgen/rpy/rinterface/rinterface.c
branches/rpy_nextgen/rpy/rinterface/tests/test_SexpEnvironment.py
Modified: branches/rpy_nextgen/rpy/rinterface/rinterface.c
===================================================================
--- branches/rpy_nextgen/rpy/rinterface/rinterface.c 2008-03-23 22:03:51 UTC
(rev 462)
+++ branches/rpy_nextgen/rpy/rinterface/rinterface.c 2008-03-23 22:08:42 UTC
(rev 463)
@@ -168,6 +168,8 @@
globalEnv->sexp = R_GlobalEnv;
+ baseNameSpaceEnv->sexp = R_BaseNamespace;
+
PyObject *res = PyInt_FromLong(status);
return res;
@@ -1008,14 +1010,24 @@
return 0;
}
+static Py_ssize_t EnvironmentSexp_length(PyObject *self)
+{
+ SEXP rho_R = ((SexpObject *)self)->sexp;
+ if (! rho_R) {
+ PyErr_Format(PyExc_ValueError, "The environment has NULL SEXP.");
+ return -1;
+ }
+ SEXP symbols = R_lsInternal(rho_R, TRUE);
+ Py_ssize_t len = (Py_ssize_t)GET_LENGTH(symbols);
+ return len;
+}
+
static PyMappingMethods EnvironmentSexp_mappignMethods = {
- 0, /* mp_length */
+ (lenfunc)EnvironmentSexp_length, /* mp_length */
(binaryfunc)EnvironmentSexp_subscript, /* mp_subscript */
(objobjargproc)EnvironmentSexp_ass_subscript /* mp_ass_subscript */
};
-//FIXME: write more doc - should the environments
-// be made like mappings at the Python level ?
PyDoc_STRVAR(EnvironmentSexp_Type_doc,
"R object that is an environment.\
R environments can be seen as similar to Python\
Modified: branches/rpy_nextgen/rpy/rinterface/tests/test_SexpEnvironment.py
===================================================================
--- branches/rpy_nextgen/rpy/rinterface/tests/test_SexpEnvironment.py
2008-03-23 22:03:51 UTC (rev 462)
+++ branches/rpy_nextgen/rpy/rinterface/tests/test_SexpEnvironment.py
2008-03-23 22:08:42 UTC (rev 463)
@@ -45,6 +45,15 @@
a = rinterface.globalEnv["a"]
self.assertTrue(False) #FIXME: write proper unit test here
+ def testLength(self):
+ newEnv = rinterface.globalEnv.get("new.env")
+ env = newEnv()
+ self.assertEquals(0, len(env))
+ env["a"] = rinterface.SexpVector([123, ], rinterface.INTSXP)
+ self.assertEquals(1, len(env))
+ env["b"] = rinterface.SexpVector([123, ], rinterface.INTSXP)
+ self.assertEquals(2, len(env))
+
def suite():
suite =
unittest.TestLoader().loadTestsFromTestCase(SexpEnvironmentTestCase)
return suite
This was sent by the SourceForge.net collaborative development platform, the
world's largest Open Source development site.
-------------------------------------------------------------------------
This SF.net email is sponsored by: Microsoft
Defy all challenges. Microsoft(R) Visual Studio 2008.
http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/
_______________________________________________
rpy-list mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/rpy-list