Bläddra i källkod

*** empty log message ***

Roger Hughston 18 år sedan
förälder
incheckning
e893ad14be
1 ändrade filer med 62 tillägg och 1 borttagningar
  1. 62 1
      direct/src/dcparser/dcPacker.cxx

+ 62 - 1
direct/src/dcparser/dcPacker.cxx

@@ -686,12 +686,73 @@ unpack_skip() {
 void DCPacker::
 void DCPacker::
 pack_object(PyObject *object) {
 pack_object(PyObject *object) {
   nassertv(_mode == M_pack || _mode == M_repack);
   nassertv(_mode == M_pack || _mode == M_repack);
+  DCPackType pack_type = get_pack_type();
+
+  // had to add this for basic 64 and unsigned data to get packed right ..
+  // Not sure if we can just do the rest this way..
 
 
+ switch(pack_type)
+  {
+  case PT_int64:
+      if(PyLong_Check(object))
+      {
+            pack_int64(PyLong_AsLongLong(object));
+            return;
+      }
+      else if (PyInt_Check(object))
+      {
+            pack_int64(PyInt_AsLong(object));
+            return;
+      }
+      break;
+  case PT_uint64:
+      if(PyLong_Check(object))
+      {
+            pack_uint64(PyLong_AsUnsignedLongLong(object));
+            return;
+      }
+      else if(PyInt_Check(object))
+      {
+            PyObject  *obj1 = PyNumber_Long(object);
+            pack_int(PyLong_AsUnsignedLongLong(obj1));
+            Py_DECREF(obj1);
+            return;
+      }
+      break;
+  case PT_int:
+      if(PyLong_Check(object))
+      {
+            pack_int(PyLong_AsLong(object));
+            return;
+      }
+      else if (PyInt_Check(object))
+      {
+            pack_int(PyInt_AsLong(object));
+            return;
+      }
+      break;
+  case PT_uint:
+      if(PyLong_Check(object))
+      {
+            pack_uint(PyLong_AsUnsignedLong(object));
+            return;
+      }
+      else if (PyInt_Check(object))
+      {
+            PyObject  *obj1 = PyNumber_Long(object);
+            pack_uint(PyLong_AsUnsignedLong(obj1));
+            Py_DECREF(obj1);
+            return;
+      }
+      break;
+  default:
+      break;
+  }
   #ifdef USE_PYTHON_2_2_OR_EARLIER
   #ifdef USE_PYTHON_2_2_OR_EARLIER
   if (PyInt_Check(object)) {
   if (PyInt_Check(object)) {
   #else
   #else
   if (PyLong_Check(object)) {
   if (PyLong_Check(object)) {
-    pack_uint(PyLong_AsUnsignedLong(object));
+    pack_int(PyLong_AsLong(object));
   } else if (PyInt_Check(object)) {
   } else if (PyInt_Check(object)) {
   #endif
   #endif
     pack_int(PyInt_AS_LONG(object));
     pack_int(PyInt_AS_LONG(object));