diff -r b758351d191f -r cc9b7e14412b web/lib/arch/osx/jcc/sources/JObject.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/web/lib/arch/osx/jcc/sources/JObject.cpp Tue May 25 02:43:45 2010 +0200 @@ -0,0 +1,186 @@ +/* + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include "JCCEnv.h" + +#ifdef PYTHON + +#include +#include "structmember.h" + +#include "JObject.h" +#include "macros.h" + + +/* JObject */ + +static void t_JObject_dealloc(t_JObject *self); +static PyObject *t_JObject_new(PyTypeObject *type, + PyObject *args, PyObject *kwds); + +static PyObject *t_JObject_richcmp(t_JObject *, PyObject *o2, int op); +static PyObject *t_JObject_str(t_JObject *self); +static PyObject *t_JObject_repr(t_JObject *self); +static int t_JObject_hash(t_JObject *self); +static PyObject *t_JObject__getJObject(t_JObject *self, void *data); + +static PyMemberDef t_JObject_members[] = { + { NULL, 0, 0, 0, NULL } +}; + +static PyMethodDef t_JObject_methods[] = { + { NULL, NULL, 0, NULL } +}; + +static PyGetSetDef t_JObject_properties[] = { + { "_jobject", (getter) t_JObject__getJObject, NULL, NULL, NULL }, + { NULL, NULL, NULL, NULL, NULL } +}; + +PyTypeObject JObject$$Type = { + PyObject_HEAD_INIT(NULL) + 0, /* ob_size */ + "jcc.JObject", /* tp_name */ + sizeof(t_JObject), /* tp_basicsize */ + 0, /* tp_itemsize */ + (destructor)t_JObject_dealloc, /* tp_dealloc */ + 0, /* tp_print */ + 0, /* tp_getattr */ + 0, /* tp_setattr */ + 0, /* tp_compare */ + (reprfunc)t_JObject_repr, /* tp_repr */ + 0, /* tp_as_number */ + 0, /* tp_as_sequence */ + 0, /* tp_as_mapping */ + (hashfunc)t_JObject_hash, /* tp_hash */ + 0, /* tp_call */ + (reprfunc)t_JObject_str, /* tp_str */ + 0, /* tp_getattro */ + 0, /* tp_setattro */ + 0, /* tp_as_buffer */ + (Py_TPFLAGS_DEFAULT | + Py_TPFLAGS_BASETYPE), /* tp_flags */ + "t_JObject objects", /* tp_doc */ + 0, /* tp_traverse */ + 0, /* tp_clear */ + (richcmpfunc)t_JObject_richcmp, /* tp_richcompare */ + 0, /* tp_weaklistoffset */ + 0, /* tp_iter */ + 0, /* tp_iternext */ + t_JObject_methods, /* tp_methods */ + t_JObject_members, /* tp_members */ + t_JObject_properties, /* tp_getset */ + 0, /* tp_base */ + 0, /* tp_dict */ + 0, /* tp_descr_get */ + 0, /* tp_descr_set */ + 0, /* tp_dictoffset */ + 0, /* tp_init */ + 0, /* tp_alloc */ + (newfunc)t_JObject_new, /* tp_new */ +}; + + +static void t_JObject_dealloc(t_JObject *self) +{ + self->object = JObject(NULL); + self->ob_type->tp_free((PyObject *) self); +} + +static PyObject *t_JObject_new(PyTypeObject *type, + PyObject *args, PyObject *kwds) +{ + t_JObject *self = (t_JObject *) type->tp_alloc(type, 0); + + self->object = JObject(NULL); + + return (PyObject *) self; +} + +static PyObject *t_JObject_richcmp(t_JObject *self, PyObject *arg, int op) +{ + int b = 0; + + switch (op) { + case Py_EQ: + case Py_NE: + if (PyObject_TypeCheck(arg, &JObject$$Type)) + b = self->object == ((t_JObject *) arg)->object; + if (op == Py_EQ) + Py_RETURN_BOOL(b); + Py_RETURN_BOOL(!b); + case Py_LT: + PyErr_SetString(PyExc_NotImplementedError, "<"); + return NULL; + case Py_LE: + PyErr_SetString(PyExc_NotImplementedError, "<="); + return NULL; + case Py_GT: + PyErr_SetString(PyExc_NotImplementedError, ">"); + return NULL; + case Py_GE: + PyErr_SetString(PyExc_NotImplementedError, ">="); + return NULL; + } + + return NULL; +} + +static PyObject *t_JObject_str(t_JObject *self) +{ + if (self->object.this$) + { + char *utf = env->toString(self->object.this$); + PyObject *unicode = PyUnicode_DecodeUTF8(utf, strlen(utf), "strict"); + + delete utf; + return unicode; + } + + return PyString_FromString(""); +} + +static PyObject *t_JObject_repr(t_JObject *self) +{ + PyObject *name = PyObject_GetAttrString((PyObject *) self->ob_type, + "__name__"); + PyObject *str = self->ob_type->tp_str((PyObject *) self); +#if PY_VERSION_HEX < 0x02040000 + PyObject *args = Py_BuildValue("(OO)", name, str); +#else + PyObject *args = PyTuple_Pack(2, name, str); +#endif + PyObject *format = PyString_FromString("<%s: %s>"); + PyObject *repr = PyString_Format(format, args); + + Py_DECREF(name); + Py_DECREF(str); + Py_DECREF(args); + Py_DECREF(format); + + return repr; +} + +static int t_JObject_hash(t_JObject *self) +{ + return env->hash(self->object.this$); +} + +static PyObject *t_JObject__getJObject(t_JObject *self, void *data) +{ + return PyCObject_FromVoidPtr((void *) self->object.this$, NULL); +} + +#endif /* PYTHON */