[Synopsis-changes] Synopsis/Synopsis/include/Synopsis Dict.hh,1.2,1.3 List.hh,1.2,1.3 Tuple.hh,1.2,1.3

Stefan Seefeld stefan at synopsis.fresco.org
Tue Jan 13 07:42:11 UTC 2004


Update of /cvs/synopsis/Synopsis/include/Synopsis
In directory frida:/tmp/cvs-serv25883/include/Synopsis

Modified Files:
	Dict.hh List.hh Tuple.hh 
Log Message:
bug fixes, and support for 'MacroCall' type

Index: Dict.hh
===================================================================
RCS file: /cvs/synopsis/Synopsis/include/Synopsis/Dict.hh,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -p -d -r1.2 -r1.3
--- Dict.hh	10 Jan 2004 22:50:34 -0000	1.2
+++ Dict.hh	13 Jan 2004 07:42:09 -0000	1.3
@@ -26,7 +26,8 @@ public:
   Dict(Object o) throw(TypeError) : Object(o) 
   { if (!PyDict_Check(o.my_impl)) throw TypeError("object not a dict");}
   void set(Object k, Object v);
-  Object get(Object k) const;
+  Object get(Object k, Object d = Object()) const;
+  bool has_key(Object k) const;
   bool del(Object k);
 
   iterator begin();
@@ -34,6 +35,7 @@ public:
    
   void clear() { PyDict_Clear(my_impl);}
   Dict copy() const { return Object(PyDict_Copy(my_impl));}
+  bool update(Dict d) { return PyDict_Update(my_impl, d.my_impl) == 0;}
    
   List keys() const { return List(Object(PyDict_Keys(my_impl)));}
   List values() const { return List(Object(PyDict_Values(my_impl)));}
@@ -106,11 +108,16 @@ inline void Dict::set(Object k, Object v
   PyDict_SetItem(my_impl, k.my_impl, v.my_impl);
 }
 
-inline Object Dict::get(Object k) const
+inline Object Dict::get(Object k, Object d) const
 {
   PyObject *retn = PyDict_GetItem(my_impl, k.my_impl);
   if (retn) Py_INCREF(retn);
-  return retn;
+  return retn ? Object(retn) : d;
+}
+
+inline bool Dict::has_key(Object k) const 
+{
+  return PyDict_GetItem(my_impl, k.my_impl) != 0;
 }
 
 inline bool Dict::del(Object k)

Index: List.hh
===================================================================
RCS file: /cvs/synopsis/Synopsis/include/Synopsis/List.hh,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -p -d -r1.2 -r1.3
--- List.hh	10 Jan 2004 22:50:34 -0000	1.2
+++ List.hh	13 Jan 2004 07:42:09 -0000	1.3
@@ -10,6 +10,7 @@
 #define _Synopsis_List_hh
 
 #include <Synopsis/Object.hh>
+#include <Synopsis/Tuple.hh>
 
 namespace Synopsis
 {
@@ -19,6 +20,7 @@ class List : public Object
 public:
   List(size_t i = 0) : Object(PyList_New(i)) {}
   List(Object) throw(TypeError);
+  Tuple tuple() const { return Tuple(PyList_AsTuple(my_impl));}
   size_t size() const { return PyList_GET_SIZE(my_impl);}
   void set(int i, Object o);
   Object get(int i) const;

Index: Tuple.hh
===================================================================
RCS file: /cvs/synopsis/Synopsis/include/Synopsis/Tuple.hh,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -p -d -r1.2 -r1.3
--- Tuple.hh	10 Jan 2004 22:50:34 -0000	1.2
+++ Tuple.hh	13 Jan 2004 07:42:09 -0000	1.3
@@ -10,7 +10,6 @@
 #define _Synopsis_Tuple_hh
 
 #include <Synopsis/Object.hh>
-#include <Synopsis/List.hh>
 
 namespace Synopsis
 {
@@ -18,9 +17,8 @@ namespace Synopsis
 class Tuple : public Object
 {
 public:
-  Tuple(size_t i = 0) : Object(PyTuple_New(i)) {}
-  Tuple(PyObject *);
-  Tuple(List l) : Object(PyList_AsTuple(l.my_impl)) {}
+  Tuple() : Object(PyTuple_New(0)) {}
+  explicit Tuple(PyObject *);
   Tuple(Object);
   Tuple(Object, Object);
   Tuple(Object, Object, Object);
@@ -72,9 +70,9 @@ Tuple::Tuple(Object o1, Object o2, Objec
    Py_INCREF(o1.my_impl);
    PyTuple_SET_ITEM(my_impl, 1, o2.my_impl);
    Py_INCREF(o2.my_impl);
-   PyTuple_SET_ITEM(my_impl, 1, o3.my_impl);
+   PyTuple_SET_ITEM(my_impl, 2, o3.my_impl);
    Py_INCREF(o3.my_impl);
-   PyTuple_SET_ITEM(my_impl, 1, o4.my_impl);
+   PyTuple_SET_ITEM(my_impl, 3, o4.my_impl);
    Py_INCREF(o4.my_impl);
 }
 
@@ -86,11 +84,11 @@ Tuple::Tuple(Object o1, Object o2, Objec
    Py_INCREF(o1.my_impl);
    PyTuple_SET_ITEM(my_impl, 1, o2.my_impl);
    Py_INCREF(o2.my_impl);
-   PyTuple_SET_ITEM(my_impl, 1, o3.my_impl);
+   PyTuple_SET_ITEM(my_impl, 2, o3.my_impl);
    Py_INCREF(o3.my_impl);
-   PyTuple_SET_ITEM(my_impl, 1, o4.my_impl);
+   PyTuple_SET_ITEM(my_impl, 3, o4.my_impl);
    Py_INCREF(o4.my_impl);
-   PyTuple_SET_ITEM(my_impl, 1, o5.my_impl);
+   PyTuple_SET_ITEM(my_impl, 4, o5.my_impl);
    Py_INCREF(o5.my_impl);
 }
 
@@ -102,13 +100,13 @@ Tuple::Tuple(Object o1, Object o2, Objec
    Py_INCREF(o1.my_impl);
    PyTuple_SET_ITEM(my_impl, 1, o2.my_impl);
    Py_INCREF(o2.my_impl);
-   PyTuple_SET_ITEM(my_impl, 1, o3.my_impl);
+   PyTuple_SET_ITEM(my_impl, 2, o3.my_impl);
    Py_INCREF(o3.my_impl);
-   PyTuple_SET_ITEM(my_impl, 1, o4.my_impl);
+   PyTuple_SET_ITEM(my_impl, 3, o4.my_impl);
    Py_INCREF(o4.my_impl);
-   PyTuple_SET_ITEM(my_impl, 1, o5.my_impl);
+   PyTuple_SET_ITEM(my_impl, 4, o5.my_impl);
    Py_INCREF(o5.my_impl);
-   PyTuple_SET_ITEM(my_impl, 1, o6.my_impl);
+   PyTuple_SET_ITEM(my_impl, 5, o6.my_impl);
    Py_INCREF(o6.my_impl);
 }
 
@@ -121,15 +119,15 @@ Tuple::Tuple(Object o1, Object o2, Objec
    Py_INCREF(o1.my_impl);
    PyTuple_SET_ITEM(my_impl, 1, o2.my_impl);
    Py_INCREF(o2.my_impl);
-   PyTuple_SET_ITEM(my_impl, 1, o3.my_impl);
+   PyTuple_SET_ITEM(my_impl, 2, o3.my_impl);
    Py_INCREF(o3.my_impl);
-   PyTuple_SET_ITEM(my_impl, 1, o4.my_impl);
+   PyTuple_SET_ITEM(my_impl, 3, o4.my_impl);
    Py_INCREF(o4.my_impl);
-   PyTuple_SET_ITEM(my_impl, 1, o5.my_impl);
+   PyTuple_SET_ITEM(my_impl, 4, o5.my_impl);
    Py_INCREF(o5.my_impl);
-   PyTuple_SET_ITEM(my_impl, 1, o6.my_impl);
+   PyTuple_SET_ITEM(my_impl, 5, o6.my_impl);
    Py_INCREF(o6.my_impl);
-   PyTuple_SET_ITEM(my_impl, 1, o7.my_impl);
+   PyTuple_SET_ITEM(my_impl, 6, o7.my_impl);
    Py_INCREF(o7.my_impl);
 }
 





More information about the Synopsis-changes mailing list