summaryrefslogtreecommitdiff
path: root/gi/pygi-marshal-from-py.c
diff options
context:
space:
mode:
Diffstat (limited to 'gi/pygi-marshal-from-py.c')
-rw-r--r--gi/pygi-marshal-from-py.c206
1 files changed, 0 insertions, 206 deletions
diff --git a/gi/pygi-marshal-from-py.c b/gi/pygi-marshal-from-py.c
deleted file mode 100644
index 259f9eaf..00000000
--- a/gi/pygi-marshal-from-py.c
+++ /dev/null
@@ -1,206 +0,0 @@
-/* -*- Mode: C; c-basic-offset: 4 -*-
- * vim: tabstop=4 shiftwidth=4 expandtab
- *
- * Copyright (C) 2011 John (J5) Palmieri <johnp@redhat.com>, Red Hat, Inc.
- *
- * pygi-marshal-from-py.c: Functions to convert PyObjects to C types.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301
- * USA
- */
-
-#include "pygi-private.h"
-
-#include <string.h>
-#include <time.h>
-#include <pygobject.h>
-#include <pyglib-python-compat.h>
-
-#include "pygi-cache.h"
-#include "pygi-marshal-cleanup.h"
-#include "pygi-marshal-from-py.h"
-
-#ifdef _WIN32
-#ifdef _MSC_VER
-#include <math.h>
-
-#ifndef NAN
-static const unsigned long __nan[2] = {0xffffffff, 0x7fffffff};
-#define NAN (*(const float *) __nan)
-#endif
-
-#ifndef INFINITY
-#define INFINITY HUGE_VAL
-#endif
-
-#endif
-#endif
-
-static gboolean
-gi_argument_from_c_long (GIArgument *arg_out,
- long c_long_in,
- GITypeTag type_tag)
-{
- switch (type_tag) {
- case GI_TYPE_TAG_INT8:
- arg_out->v_int8 = c_long_in;
- return TRUE;
- case GI_TYPE_TAG_UINT8:
- arg_out->v_uint8 = c_long_in;
- return TRUE;
- case GI_TYPE_TAG_INT16:
- arg_out->v_int16 = c_long_in;
- return TRUE;
- case GI_TYPE_TAG_UINT16:
- arg_out->v_uint16 = c_long_in;
- return TRUE;
- case GI_TYPE_TAG_INT32:
- arg_out->v_int32 = c_long_in;
- return TRUE;
- case GI_TYPE_TAG_UINT32:
- arg_out->v_uint32 = c_long_in;
- return TRUE;
- case GI_TYPE_TAG_INT64:
- arg_out->v_int64 = c_long_in;
- return TRUE;
- case GI_TYPE_TAG_UINT64:
- arg_out->v_uint64 = c_long_in;
- return TRUE;
- default:
- PyErr_Format (PyExc_TypeError,
- "Unable to marshal C long %ld to %s",
- c_long_in,
- g_type_tag_to_string (type_tag));
- return FALSE;
- }
-}
-
-gboolean
-_pygi_marshal_from_py_interface_enum (PyGIInvokeState *state,
- PyGICallableCache *callable_cache,
- PyGIArgCache *arg_cache,
- PyObject *py_arg,
- GIArgument *arg,
- gpointer *cleanup_data)
-{
- PyObject *py_long;
- long c_long;
- gint is_instance;
- PyGIInterfaceCache *iface_cache = (PyGIInterfaceCache *)arg_cache;
- GIBaseInfo *interface = NULL;
-
- is_instance = PyObject_IsInstance (py_arg, iface_cache->py_type);
-
- py_long = PYGLIB_PyNumber_Long (py_arg);
- if (py_long == NULL) {
- PyErr_Clear();
- goto err;
- }
-
- c_long = PYGLIB_PyLong_AsLong (py_long);
- Py_DECREF (py_long);
-
- /* Write c_long into arg */
- interface = g_type_info_get_interface (arg_cache->type_info);
- assert(g_base_info_get_type (interface) == GI_INFO_TYPE_ENUM);
- if (!gi_argument_from_c_long(arg,
- c_long,
- g_enum_info_get_storage_type ((GIEnumInfo *)interface))) {
- g_assert_not_reached();
- g_base_info_unref (interface);
- return FALSE;
- }
-
- /* If this is not an instance of the Enum type that we want
- * we need to check if the value is equivilant to one of the
- * Enum's memebers */
- if (!is_instance) {
- int i;
- gboolean is_found = FALSE;
-
- for (i = 0; i < g_enum_info_get_n_values (iface_cache->interface_info); i++) {
- GIValueInfo *value_info =
- g_enum_info_get_value (iface_cache->interface_info, i);
- glong enum_value = g_value_info_get_value (value_info);
- g_base_info_unref ( (GIBaseInfo *)value_info);
- if (c_long == enum_value) {
- is_found = TRUE;
- break;
- }
- }
-
- if (!is_found)
- goto err;
- }
-
- g_base_info_unref (interface);
- return TRUE;
-
-err:
- if (interface)
- g_base_info_unref (interface);
- PyErr_Format (PyExc_TypeError, "Expected a %s, but got %s",
- iface_cache->type_name, py_arg->ob_type->tp_name);
- return FALSE;
-}
-
-gboolean
-_pygi_marshal_from_py_interface_flags (PyGIInvokeState *state,
- PyGICallableCache *callable_cache,
- PyGIArgCache *arg_cache,
- PyObject *py_arg,
- GIArgument *arg,
- gpointer *cleanup_data)
-{
- PyObject *py_long;
- long c_long;
- gint is_instance;
- PyGIInterfaceCache *iface_cache = (PyGIInterfaceCache *)arg_cache;
- GIBaseInfo *interface;
-
- is_instance = PyObject_IsInstance (py_arg, iface_cache->py_type);
-
- py_long = PYGLIB_PyNumber_Long (py_arg);
- if (py_long == NULL) {
- PyErr_Clear ();
- goto err;
- }
-
- c_long = PYGLIB_PyLong_AsLong (py_long);
- Py_DECREF (py_long);
-
- /* only 0 or argument of type Flag is allowed */
- if (!is_instance && c_long != 0)
- goto err;
-
- /* Write c_long into arg */
- interface = g_type_info_get_interface (arg_cache->type_info);
- g_assert (g_base_info_get_type (interface) == GI_INFO_TYPE_FLAGS);
- if (!gi_argument_from_c_long(arg, c_long,
- g_enum_info_get_storage_type ((GIEnumInfo *)interface))) {
- g_base_info_unref (interface);
- return FALSE;
- }
-
- g_base_info_unref (interface);
- return TRUE;
-
-err:
- PyErr_Format (PyExc_TypeError, "Expected a %s, but got %s",
- iface_cache->type_name, py_arg->ob_type->tp_name);
- return FALSE;
-
-}
-