Revision: 19826
          
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=19826
Author:   campbellbarton
Date:     2009-04-21 01:17:52 +0200 (Tue, 21 Apr 2009)

Log Message:
-----------
BGE Python API
Separate getting a normal attribute and getting __dict__, was having to do too 
a check for __dict__ on each class (multiple times per getattro call from 
python) when its not used that often.

Modified Paths:
--------------
    trunk/blender/source/gameengine/Converter/BL_ActionActuator.cpp
    trunk/blender/source/gameengine/Converter/BL_ActionActuator.h
    trunk/blender/source/gameengine/Converter/BL_ShapeActionActuator.cpp
    trunk/blender/source/gameengine/Converter/BL_ShapeActionActuator.h
    trunk/blender/source/gameengine/Expressions/ListValue.cpp
    trunk/blender/source/gameengine/Expressions/ListValue.h
    trunk/blender/source/gameengine/Expressions/PyObjectPlus.cpp
    trunk/blender/source/gameengine/Expressions/PyObjectPlus.h
    trunk/blender/source/gameengine/Expressions/Value.cpp
    trunk/blender/source/gameengine/Expressions/Value.h
    trunk/blender/source/gameengine/GameLogic/SCA_2DFilterActuator.cpp
    trunk/blender/source/gameengine/GameLogic/SCA_2DFilterActuator.h
    trunk/blender/source/gameengine/GameLogic/SCA_ANDController.cpp
    trunk/blender/source/gameengine/GameLogic/SCA_ANDController.h
    trunk/blender/source/gameengine/GameLogic/SCA_ActuatorSensor.cpp
    trunk/blender/source/gameengine/GameLogic/SCA_ActuatorSensor.h
    trunk/blender/source/gameengine/GameLogic/SCA_AlwaysSensor.cpp
    trunk/blender/source/gameengine/GameLogic/SCA_AlwaysSensor.h
    trunk/blender/source/gameengine/GameLogic/SCA_DelaySensor.cpp
    trunk/blender/source/gameengine/GameLogic/SCA_DelaySensor.h
    trunk/blender/source/gameengine/GameLogic/SCA_ExpressionController.h
    trunk/blender/source/gameengine/GameLogic/SCA_ILogicBrick.cpp
    trunk/blender/source/gameengine/GameLogic/SCA_ILogicBrick.h
    trunk/blender/source/gameengine/GameLogic/SCA_IObject.cpp
    trunk/blender/source/gameengine/GameLogic/SCA_IObject.h
    trunk/blender/source/gameengine/GameLogic/SCA_ISensor.cpp
    trunk/blender/source/gameengine/GameLogic/SCA_ISensor.h
    trunk/blender/source/gameengine/GameLogic/SCA_JoystickSensor.cpp
    trunk/blender/source/gameengine/GameLogic/SCA_JoystickSensor.h
    trunk/blender/source/gameengine/GameLogic/SCA_KeyboardSensor.cpp
    trunk/blender/source/gameengine/GameLogic/SCA_KeyboardSensor.h
    trunk/blender/source/gameengine/GameLogic/SCA_MouseSensor.cpp
    trunk/blender/source/gameengine/GameLogic/SCA_MouseSensor.h
    trunk/blender/source/gameengine/GameLogic/SCA_NANDController.cpp
    trunk/blender/source/gameengine/GameLogic/SCA_NANDController.h
    trunk/blender/source/gameengine/GameLogic/SCA_NORController.cpp
    trunk/blender/source/gameengine/GameLogic/SCA_NORController.h
    trunk/blender/source/gameengine/GameLogic/SCA_ORController.cpp
    trunk/blender/source/gameengine/GameLogic/SCA_ORController.h
    trunk/blender/source/gameengine/GameLogic/SCA_PropertyActuator.cpp
    trunk/blender/source/gameengine/GameLogic/SCA_PropertyActuator.h
    trunk/blender/source/gameengine/GameLogic/SCA_PropertySensor.cpp
    trunk/blender/source/gameengine/GameLogic/SCA_PropertySensor.h
    trunk/blender/source/gameengine/GameLogic/SCA_RandomActuator.cpp
    trunk/blender/source/gameengine/GameLogic/SCA_RandomActuator.h
    trunk/blender/source/gameengine/GameLogic/SCA_RandomSensor.cpp
    trunk/blender/source/gameengine/GameLogic/SCA_RandomSensor.h
    trunk/blender/source/gameengine/GameLogic/SCA_XNORController.cpp
    trunk/blender/source/gameengine/GameLogic/SCA_XNORController.h
    trunk/blender/source/gameengine/GameLogic/SCA_XORController.cpp
    trunk/blender/source/gameengine/GameLogic/SCA_XORController.h
    trunk/blender/source/gameengine/Ketsji/BL_Shader.cpp
    trunk/blender/source/gameengine/Ketsji/BL_Shader.h
    
trunk/blender/source/gameengine/Ketsji/KXNetwork/KX_NetworkMessageActuator.cpp
    trunk/blender/source/gameengine/Ketsji/KXNetwork/KX_NetworkMessageActuator.h
    trunk/blender/source/gameengine/Ketsji/KXNetwork/KX_NetworkMessageSensor.cpp
    trunk/blender/source/gameengine/Ketsji/KXNetwork/KX_NetworkMessageSensor.h
    trunk/blender/source/gameengine/Ketsji/KX_BlenderMaterial.cpp
    trunk/blender/source/gameengine/Ketsji/KX_BlenderMaterial.h
    trunk/blender/source/gameengine/Ketsji/KX_CDActuator.cpp
    trunk/blender/source/gameengine/Ketsji/KX_CDActuator.h
    trunk/blender/source/gameengine/Ketsji/KX_Camera.cpp
    trunk/blender/source/gameengine/Ketsji/KX_Camera.h
    trunk/blender/source/gameengine/Ketsji/KX_CameraActuator.cpp
    trunk/blender/source/gameengine/Ketsji/KX_CameraActuator.h
    trunk/blender/source/gameengine/Ketsji/KX_ConstraintActuator.cpp
    trunk/blender/source/gameengine/Ketsji/KX_ConstraintActuator.h
    trunk/blender/source/gameengine/Ketsji/KX_ConstraintWrapper.cpp
    trunk/blender/source/gameengine/Ketsji/KX_ConstraintWrapper.h
    trunk/blender/source/gameengine/Ketsji/KX_GameActuator.cpp
    trunk/blender/source/gameengine/Ketsji/KX_GameActuator.h
    trunk/blender/source/gameengine/Ketsji/KX_GameObject.cpp
    trunk/blender/source/gameengine/Ketsji/KX_GameObject.h
    trunk/blender/source/gameengine/Ketsji/KX_IpoActuator.cpp
    trunk/blender/source/gameengine/Ketsji/KX_IpoActuator.h
    trunk/blender/source/gameengine/Ketsji/KX_Light.cpp
    trunk/blender/source/gameengine/Ketsji/KX_Light.h
    trunk/blender/source/gameengine/Ketsji/KX_MeshProxy.cpp
    trunk/blender/source/gameengine/Ketsji/KX_MeshProxy.h
    trunk/blender/source/gameengine/Ketsji/KX_MouseFocusSensor.cpp
    trunk/blender/source/gameengine/Ketsji/KX_MouseFocusSensor.h
    trunk/blender/source/gameengine/Ketsji/KX_NearSensor.cpp
    trunk/blender/source/gameengine/Ketsji/KX_NearSensor.h
    trunk/blender/source/gameengine/Ketsji/KX_ObjectActuator.cpp
    trunk/blender/source/gameengine/Ketsji/KX_ObjectActuator.h
    trunk/blender/source/gameengine/Ketsji/KX_ParentActuator.cpp
    trunk/blender/source/gameengine/Ketsji/KX_ParentActuator.h
    trunk/blender/source/gameengine/Ketsji/KX_PhysicsObjectWrapper.cpp
    trunk/blender/source/gameengine/Ketsji/KX_PhysicsObjectWrapper.h
    trunk/blender/source/gameengine/Ketsji/KX_PolyProxy.cpp
    trunk/blender/source/gameengine/Ketsji/KX_PolyProxy.h
    trunk/blender/source/gameengine/Ketsji/KX_PolygonMaterial.cpp
    trunk/blender/source/gameengine/Ketsji/KX_PolygonMaterial.h
    trunk/blender/source/gameengine/Ketsji/KX_RadarSensor.cpp
    trunk/blender/source/gameengine/Ketsji/KX_RadarSensor.h
    trunk/blender/source/gameengine/Ketsji/KX_RaySensor.cpp
    trunk/blender/source/gameengine/Ketsji/KX_RaySensor.h
    trunk/blender/source/gameengine/Ketsji/KX_SCA_AddObjectActuator.cpp
    trunk/blender/source/gameengine/Ketsji/KX_SCA_AddObjectActuator.h
    trunk/blender/source/gameengine/Ketsji/KX_SCA_DynamicActuator.cpp
    trunk/blender/source/gameengine/Ketsji/KX_SCA_DynamicActuator.h
    trunk/blender/source/gameengine/Ketsji/KX_SCA_EndObjectActuator.cpp
    trunk/blender/source/gameengine/Ketsji/KX_SCA_EndObjectActuator.h
    trunk/blender/source/gameengine/Ketsji/KX_SCA_ReplaceMeshActuator.cpp
    trunk/blender/source/gameengine/Ketsji/KX_SCA_ReplaceMeshActuator.h
    trunk/blender/source/gameengine/Ketsji/KX_Scene.cpp
    trunk/blender/source/gameengine/Ketsji/KX_Scene.h
    trunk/blender/source/gameengine/Ketsji/KX_SceneActuator.cpp
    trunk/blender/source/gameengine/Ketsji/KX_SceneActuator.h
    trunk/blender/source/gameengine/Ketsji/KX_SoundActuator.cpp
    trunk/blender/source/gameengine/Ketsji/KX_SoundActuator.h
    trunk/blender/source/gameengine/Ketsji/KX_StateActuator.cpp
    trunk/blender/source/gameengine/Ketsji/KX_StateActuator.h
    trunk/blender/source/gameengine/Ketsji/KX_TouchSensor.cpp
    trunk/blender/source/gameengine/Ketsji/KX_TouchSensor.h
    trunk/blender/source/gameengine/Ketsji/KX_TrackToActuator.cpp
    trunk/blender/source/gameengine/Ketsji/KX_TrackToActuator.h
    trunk/blender/source/gameengine/Ketsji/KX_VehicleWrapper.cpp
    trunk/blender/source/gameengine/Ketsji/KX_VehicleWrapper.h
    trunk/blender/source/gameengine/Ketsji/KX_VertexProxy.cpp
    trunk/blender/source/gameengine/Ketsji/KX_VertexProxy.h
    trunk/blender/source/gameengine/Ketsji/KX_VisibilityActuator.cpp
    trunk/blender/source/gameengine/Ketsji/KX_VisibilityActuator.h

Modified: trunk/blender/source/gameengine/Converter/BL_ActionActuator.cpp
===================================================================
--- trunk/blender/source/gameengine/Converter/BL_ActionActuator.cpp     
2009-04-20 21:20:33 UTC (rev 19825)
+++ trunk/blender/source/gameengine/Converter/BL_ActionActuator.cpp     
2009-04-20 23:17:52 UTC (rev 19826)
@@ -1020,6 +1020,10 @@
        py_getattro_up(SCA_IActuator);
 }
 
+PyObject* BL_ActionActuator::py_getattro_dict() {
+       py_getattro_dict_up(SCA_IActuator);
+}
+
 int BL_ActionActuator::py_setattro(PyObject *attr, PyObject* value) {
        py_setattro_up(SCA_IActuator);
 }

Modified: trunk/blender/source/gameengine/Converter/BL_ActionActuator.h
===================================================================
--- trunk/blender/source/gameengine/Converter/BL_ActionActuator.h       
2009-04-20 21:20:33 UTC (rev 19825)
+++ trunk/blender/source/gameengine/Converter/BL_ActionActuator.h       
2009-04-20 23:17:52 UTC (rev 19826)
@@ -114,6 +114,7 @@
        KX_PYMETHOD_DOC(BL_ActionActuator,setChannel);
 
        virtual PyObject* py_getattro(PyObject* attr);
+       virtual PyObject*               py_getattro_dict();
        virtual int py_setattro(PyObject* attr, PyObject* value);
 
        static PyObject*        pyattr_get_action(void *self_v, const 
KX_PYATTRIBUTE_DEF *attrdef);

Modified: trunk/blender/source/gameengine/Converter/BL_ShapeActionActuator.cpp
===================================================================
--- trunk/blender/source/gameengine/Converter/BL_ShapeActionActuator.cpp        
2009-04-20 21:20:33 UTC (rev 19825)
+++ trunk/blender/source/gameengine/Converter/BL_ShapeActionActuator.cpp        
2009-04-20 23:17:52 UTC (rev 19826)
@@ -489,6 +489,10 @@
        py_getattro_up(SCA_IActuator);
 }
 
+PyObject* BL_ShapeActionActuator::py_getattro_dict() {
+       py_getattro_dict_up(SCA_IActuator);
+}
+
 int BL_ShapeActionActuator::py_setattro(PyObject *attr, PyObject* value) {
        py_setattro_up(SCA_IActuator);
 }

Modified: trunk/blender/source/gameengine/Converter/BL_ShapeActionActuator.h
===================================================================
--- trunk/blender/source/gameengine/Converter/BL_ShapeActionActuator.h  
2009-04-20 21:20:33 UTC (rev 19825)
+++ trunk/blender/source/gameengine/Converter/BL_ShapeActionActuator.h  
2009-04-20 23:17:52 UTC (rev 19826)
@@ -107,6 +107,7 @@
        KX_PYMETHOD_DOC_VARARGS(BL_ShapeActionActuator,SetType);
 
        virtual PyObject* py_getattro(PyObject* attr);
+       virtual PyObject*               py_getattro_dict();
        virtual int py_setattro(PyObject* attr, PyObject* value);
 
        static PyObject*        pyattr_get_action(void *self_v, const 
KX_PYATTRIBUTE_DEF *attrdef);

Modified: trunk/blender/source/gameengine/Expressions/ListValue.cpp
===================================================================
--- trunk/blender/source/gameengine/Expressions/ListValue.cpp   2009-04-20 
21:20:33 UTC (rev 19825)
+++ trunk/blender/source/gameengine/Expressions/ListValue.cpp   2009-04-20 
23:17:52 UTC (rev 19826)
@@ -273,7 +273,11 @@
        py_getattro_up(CValue);
 }
 
+PyObject* CListValue::py_getattro_dict() {
+       py_getattro_dict_up(CValue);
+}
 
+
 //////////////////////////////////////////////////////////////////////
 // Construction/Destruction
 //////////////////////////////////////////////////////////////////////

Modified: trunk/blender/source/gameengine/Expressions/ListValue.h
===================================================================
--- trunk/blender/source/gameengine/Expressions/ListValue.h     2009-04-20 
21:20:33 UTC (rev 19825)
+++ trunk/blender/source/gameengine/Expressions/ListValue.h     2009-04-20 
23:17:52 UTC (rev 19826)
@@ -60,6 +60,7 @@
        bool CheckEqual(CValue* first,CValue* second);
 
        virtual PyObject* py_getattro(PyObject* attr);
+       virtual PyObject* py_getattro_dict();
        virtual PyObject* py_repr(void) {
                PyObject *py_proxy= this->GetProxy();
                PyObject *py_list= PySequence_List(py_proxy);

Modified: trunk/blender/source/gameengine/Expressions/PyObjectPlus.cpp
===================================================================
--- trunk/blender/source/gameengine/Expressions/PyObjectPlus.cpp        
2009-04-20 21:20:33 UTC (rev 19825)
+++ trunk/blender/source/gameengine/Expressions/PyObjectPlus.cpp        
2009-04-20 23:17:52 UTC (rev 19826)
@@ -143,7 +143,13 @@
                PyErr_SetString(PyExc_RuntimeError, BGE_PROXY_ERROR_MSG);
                return NULL;
        }
-       return self_plus->py_getattro(attr); 
+       
+       PyObject *ret= self_plus->py_getattro(attr);
+       
+       if(ret==NULL && (strcmp(PyString_AsString(attr), "__dict__")==0))
+               ret= self_plus->py_getattro_dict();
+       
+       return ret;
 }
 
 /* This should be the entry in Type since it takes the C++ class from 
PyObjectPlus_Proxy */
@@ -177,9 +183,6 @@
 {
        PyObject *descr = PyDict_GetItem(Type.tp_dict, attr); \
        if (descr == NULL) {
-               if (strcmp(PyString_AsString(attr), "__dict__")==0) {
-                       return py_getattr_dict(NULL, Type.tp_dict); /* no 
Attributes yet */
-               }
                PyErr_Format(PyExc_AttributeError, "attribute \"%s\" not 
found", PyString_AsString(attr));
                return NULL;
        } else {
@@ -196,6 +199,10 @@
        }
 }
 
+PyObject* PyObjectPlus::py_getattro_dict() {
+       return py_getattr_dict(NULL, Type.tp_dict);
+}
+
 int PyObjectPlus::py_delattro(PyObject* attr)
 {
        PyErr_SetString(PyExc_AttributeError, "attribute cant be deleted");

Modified: trunk/blender/source/gameengine/Expressions/PyObjectPlus.h
===================================================================
--- trunk/blender/source/gameengine/Expressions/PyObjectPlus.h  2009-04-20 
21:20:33 UTC (rev 19825)
+++ trunk/blender/source/gameengine/Expressions/PyObjectPlus.h  2009-04-20 
23:17:52 UTC (rev 19826)
@@ -130,16 +130,12 @@
                } \
        } else { \
                PyErr_Clear(); \
-               PyObject *rvalue= Parent::py_getattro(attr); \
-                \
-               if (strcmp(PyString_AsString(attr), "__dict__")==0) { \
-                       return py_getattr_dict(rvalue, Type.tp_dict); \
-               } \
-                \
-               return rvalue; \
+               return Parent::py_getattro(attr); \
        } \
        return NULL;
 
+#define py_getattro_dict_up(Parent) \
+       return py_getattr_dict(Parent::py_getattro_dict(), Type.tp_dict);
 
 /*
  * nonzero values are an error for setattr
@@ -434,6 +430,7 @@
        /* These are all virtual python methods that are defined in each class
         * Our own fake subclassing calls these on each class, then calls the 
parent */
        virtual PyObject*               py_getattro(PyObject *attr);
+       virtual PyObject*               py_getattro_dict();
        virtual int                     py_delattro(PyObject *attr);
        virtual int                     py_setattro(PyObject *attr, PyObject 
*value);
        virtual PyObject*               py_repr(void);

Modified: trunk/blender/source/gameengine/Expressions/Value.cpp
===================================================================
--- trunk/blender/source/gameengine/Expressions/Value.cpp       2009-04-20 
21:20:33 UTC (rev 19825)
+++ trunk/blender/source/gameengine/Expressions/Value.cpp       2009-04-20 
23:17:52 UTC (rev 19826)
@@ -612,6 +612,10 @@
        py_getattro_up(PyObjectPlus);
 }
 
+PyObject* CValue::py_getattro_dict() {
+       py_getattro_dict_up(PyObjectPlus);
+}
+
 CValue* CValue::ConvertPythonToValue(PyObject* pyobj)
 {
 

Modified: trunk/blender/source/gameengine/Expressions/Value.h
===================================================================
--- trunk/blender/source/gameengine/Expressions/Value.h 2009-04-20 21:20:33 UTC 
(rev 19825)
+++ trunk/blender/source/gameengine/Expressions/Value.h 2009-04-20 23:17:52 UTC 
(rev 19826)
@@ -225,6 +225,7 @@
 
 
        virtual PyObject*                       py_getattro(PyObject *attr);
+       virtual PyObject*                       py_getattro_dict();
        virtual PyObject*       ConvertValueToPython() {
                return NULL;
        }

Modified: trunk/blender/source/gameengine/GameLogic/SCA_2DFilterActuator.cpp
===================================================================
--- trunk/blender/source/gameengine/GameLogic/SCA_2DFilterActuator.cpp  
2009-04-20 21:20:33 UTC (rev 19825)
+++ trunk/blender/source/gameengine/GameLogic/SCA_2DFilterActuator.cpp  
2009-04-20 23:17:52 UTC (rev 19826)
@@ -157,6 +157,10 @@
     py_getattro_up(SCA_IActuator);
 }
 
+PyObject* SCA_2DFilterActuator::py_getattro_dict() {
+       py_getattro_dict_up(SCA_IActuator);
+}
+
 int SCA_2DFilterActuator::py_setattro(PyObject *attr, PyObject* value) 
 {
        py_setattro_up(SCA_IActuator);

Modified: trunk/blender/source/gameengine/GameLogic/SCA_2DFilterActuator.h
===================================================================
--- trunk/blender/source/gameengine/GameLogic/SCA_2DFilterActuator.h    
2009-04-20 21:20:33 UTC (rev 19825)
+++ trunk/blender/source/gameengine/GameLogic/SCA_2DFilterActuator.h    
2009-04-20 23:17:52 UTC (rev 19826)
@@ -71,6 +71,7 @@
        /* 
--------------------------------------------------------------------- */
 
     virtual PyObject* py_getattro(PyObject *attr);
+       virtual PyObject* py_getattro_dict();
        virtual int py_setattro(PyObject *attr, PyObject* value);
 
 };

Modified: trunk/blender/source/gameengine/GameLogic/SCA_ANDController.cpp
===================================================================
--- trunk/blender/source/gameengine/GameLogic/SCA_ANDController.cpp     
2009-04-20 21:20:33 UTC (rev 19825)
+++ trunk/blender/source/gameengine/GameLogic/SCA_ANDController.cpp     
2009-04-20 23:17:52 UTC (rev 19826)
@@ -145,4 +145,8 @@
        py_getattro_up(SCA_IController);
 }
 
+PyObject* SCA_ANDController::py_getattro_dict() {
+       py_getattro_dict_up(SCA_IController);
+}
+
 /* eof */

Modified: trunk/blender/source/gameengine/GameLogic/SCA_ANDController.h
===================================================================
--- trunk/blender/source/gameengine/GameLogic/SCA_ANDController.h       
2009-04-20 21:20:33 UTC (rev 19825)
+++ trunk/blender/source/gameengine/GameLogic/SCA_ANDController.h       
2009-04-20 23:17:52 UTC (rev 19826)
@@ -49,6 +49,7 @@
        /* 
--------------------------------------------------------------------- */
 
        virtual PyObject* py_getattro(PyObject *attr);
+       virtual PyObject* py_getattro_dict();
 
 };
 

Modified: trunk/blender/source/gameengine/GameLogic/SCA_ActuatorSensor.cpp
===================================================================
--- trunk/blender/source/gameengine/GameLogic/SCA_ActuatorSensor.cpp    
2009-04-20 21:20:33 UTC (rev 19825)
+++ trunk/blender/source/gameengine/GameLogic/SCA_ActuatorSensor.cpp    
2009-04-20 23:17:52 UTC (rev 19826)
@@ -165,6 +165,10 @@
        py_getattro_up(SCA_ISensor);
 }
 
+PyObject* SCA_ActuatorSensor::py_getattro_dict() {
+       py_getattro_dict_up(SCA_ISensor);
+}
+
 int SCA_ActuatorSensor::py_setattro(PyObject *attr, PyObject *value) {
        py_setattro_up(SCA_ISensor);
 }

Modified: trunk/blender/source/gameengine/GameLogic/SCA_ActuatorSensor.h
===================================================================

@@ Diff output truncated at 10240 characters. @@

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to