patch #2911 - tp_getset for Lamp module.
A nice juicy chunk of new style attribute handling from Ken Hughes. Thanks, Ken.
This commit is contained in:
File diff suppressed because it is too large
Load Diff
@@ -588,3 +588,172 @@ PyObject *EXPP_addScriptLink(ScriptLink *slink, PyObject *args, int is_scene)
|
|||||||
|
|
||||||
return EXPP_incr_ret (Py_None); /* normal exit */
|
return EXPP_incr_ret (Py_None); /* normal exit */
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Utility routines to clamp and store various datatypes. The object type
|
||||||
|
* is checked and a exception is raised if it's not the correct type.
|
||||||
|
*
|
||||||
|
* Inputs:
|
||||||
|
* value: PyObject containing the new value
|
||||||
|
* param: pointer to destination variable
|
||||||
|
* max, min: range of values for clamping
|
||||||
|
*
|
||||||
|
* Return 0 on success, -1 on error.
|
||||||
|
*/
|
||||||
|
|
||||||
|
int EXPP_setCharClamped ( PyObject *value, char *param,
|
||||||
|
short min, short max )
|
||||||
|
{
|
||||||
|
/* if value not of correct type, raise Type exception */
|
||||||
|
|
||||||
|
if( !PyInt_CheckExact( value ) ) {
|
||||||
|
char errstr[128];
|
||||||
|
sprintf ( errstr, "expected char argument in [%d,%d]", min, max );
|
||||||
|
return EXPP_ReturnIntError( PyExc_TypeError, errstr );
|
||||||
|
}
|
||||||
|
|
||||||
|
/* clamp and store value */
|
||||||
|
|
||||||
|
*param = EXPP_ClampInt( PyInt_AS_LONG ( value ), min, max );
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
int EXPP_setShortClamped ( PyObject *value, short *param,
|
||||||
|
short min, short max )
|
||||||
|
{
|
||||||
|
if( !PyInt_CheckExact ( value ) ) {
|
||||||
|
char errstr[128];
|
||||||
|
sprintf ( errstr, "expected int argument in [%d,%d]", min, max );
|
||||||
|
return EXPP_ReturnIntError( PyExc_TypeError, errstr );
|
||||||
|
}
|
||||||
|
|
||||||
|
*param = EXPP_ClampInt( PyInt_AS_LONG ( value ), min, max );
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
int EXPP_setIntClamped ( PyObject *value, int *param,
|
||||||
|
int min, int max )
|
||||||
|
{
|
||||||
|
if( !PyInt_CheckExact ( value ) ) {
|
||||||
|
char errstr[128];
|
||||||
|
sprintf ( errstr, "expected int argument in [%d,%d]", min, max );
|
||||||
|
return EXPP_ReturnIntError( PyExc_TypeError, errstr );
|
||||||
|
}
|
||||||
|
|
||||||
|
*param = EXPP_ClampInt( PyInt_AS_LONG ( value ), min, max );
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
int EXPP_setFloatClamped ( PyObject *value, float *param,
|
||||||
|
float min, float max )
|
||||||
|
{
|
||||||
|
if( !PyFloat_CheckExact ( value ) ) {
|
||||||
|
char errstr[128];
|
||||||
|
sprintf ( errstr, "expected float argument in [%f,%f]", min, max );
|
||||||
|
return EXPP_ReturnIntError( PyExc_TypeError, errstr );
|
||||||
|
}
|
||||||
|
|
||||||
|
*param = EXPP_ClampFloat( PyFloat_AS_DOUBLE( value ), min, max );
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Utility routines to range-check and store various datatypes. The object
|
||||||
|
* type is checked and a exception is raised if it's not the correct type.
|
||||||
|
* An exception is also raised if the value lies outside of the specified
|
||||||
|
* range.
|
||||||
|
*
|
||||||
|
* Inputs:
|
||||||
|
* value: PyObject containing the new value
|
||||||
|
* param: pointer to destination variable
|
||||||
|
* max, min: valid range for value
|
||||||
|
*
|
||||||
|
* Return 0 on success, -1 on error.
|
||||||
|
*/
|
||||||
|
|
||||||
|
int EXPP_setCharRange ( PyObject *value, char *param,
|
||||||
|
short min, short max )
|
||||||
|
{
|
||||||
|
char errstr[128];
|
||||||
|
short number;
|
||||||
|
|
||||||
|
/* build exception error string */
|
||||||
|
|
||||||
|
sprintf ( errstr, "expected int argument in [%d,%d]", min, max );
|
||||||
|
|
||||||
|
/* if value not of correct type, raise Type exception */
|
||||||
|
|
||||||
|
if( !PyInt_CheckExact ( value ) )
|
||||||
|
return EXPP_ReturnIntError( PyExc_TypeError, errstr );
|
||||||
|
|
||||||
|
/* if value out of range, raise Value exception */
|
||||||
|
|
||||||
|
number = PyInt_AS_LONG ( value );
|
||||||
|
if ( number < min || number > max )
|
||||||
|
return EXPP_ReturnIntError( PyExc_ValueError, errstr );
|
||||||
|
|
||||||
|
/* store value */
|
||||||
|
|
||||||
|
*param = number;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
int EXPP_setShortRange ( PyObject *value, short *param,
|
||||||
|
short min, short max )
|
||||||
|
{
|
||||||
|
char errstr[128];
|
||||||
|
short number;
|
||||||
|
|
||||||
|
sprintf ( errstr, "expected int argument in [%d,%d]", min, max );
|
||||||
|
|
||||||
|
if( !PyInt_CheckExact ( value ) )
|
||||||
|
return EXPP_ReturnIntError( PyExc_TypeError, errstr );
|
||||||
|
|
||||||
|
number = PyInt_AS_LONG ( value );
|
||||||
|
if ( number < min || number > max )
|
||||||
|
return EXPP_ReturnIntError( PyExc_ValueError, errstr );
|
||||||
|
|
||||||
|
*param = number;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
int EXPP_setIntRange ( PyObject *value, int *param,
|
||||||
|
int min, int max )
|
||||||
|
{
|
||||||
|
char errstr[128];
|
||||||
|
int number;
|
||||||
|
|
||||||
|
sprintf ( errstr, "expected int argument in [%d,%d]", min, max );
|
||||||
|
|
||||||
|
if( !PyInt_CheckExact ( value ) )
|
||||||
|
return EXPP_ReturnIntError( PyExc_TypeError, errstr );
|
||||||
|
|
||||||
|
number = PyInt_AS_LONG ( value );
|
||||||
|
if ( number < min || number > max )
|
||||||
|
return EXPP_ReturnIntError( PyExc_ValueError, errstr );
|
||||||
|
|
||||||
|
*param = number;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
int EXPP_setFloatRange ( PyObject *value, float *param,
|
||||||
|
float min, float max )
|
||||||
|
{
|
||||||
|
char errstr[128];
|
||||||
|
short number;
|
||||||
|
|
||||||
|
sprintf ( errstr, "expected int argument in [%f,%f]", min, max );
|
||||||
|
|
||||||
|
if( !PyFloat_CheckExact ( value ) )
|
||||||
|
return EXPP_ReturnIntError( PyExc_TypeError, errstr );
|
||||||
|
|
||||||
|
number = PyFloat_AS_DOUBLE( value );
|
||||||
|
if ( number < min || number > max )
|
||||||
|
return EXPP_ReturnIntError( PyExc_ValueError, errstr );
|
||||||
|
|
||||||
|
*param = number;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|||||||
@@ -97,6 +97,26 @@ int EXPP_map_getShortVal( const EXPP_map_pair * map,
|
|||||||
int EXPP_map_getStrVal( const EXPP_map_pair * map,
|
int EXPP_map_getStrVal( const EXPP_map_pair * map,
|
||||||
int ival, const char **sval );
|
int ival, const char **sval );
|
||||||
|
|
||||||
|
/* clamping and range-checking utilities */
|
||||||
|
|
||||||
|
int EXPP_setCharClamped ( PyObject *value, char *param,
|
||||||
|
short min, short max);
|
||||||
|
int EXPP_setShortClamped ( PyObject *value, short *param,
|
||||||
|
short min, short max);
|
||||||
|
int EXPP_setIntClamped ( PyObject *value, int *param,
|
||||||
|
int min, int max);
|
||||||
|
int EXPP_setFloatClamped ( PyObject *value, float *param,
|
||||||
|
float min, float max);
|
||||||
|
|
||||||
|
int EXPP_setChrRange ( PyObject *value, char *param,
|
||||||
|
short min, short max);
|
||||||
|
int EXPP_setShortRange ( PyObject *value, short *param,
|
||||||
|
short min, short max);
|
||||||
|
int EXPP_setIntRange ( PyObject *value, int *param,
|
||||||
|
int min, int max);
|
||||||
|
int EXPP_setFloatRange ( PyObject *value, float *param,
|
||||||
|
float min, float max);
|
||||||
|
|
||||||
/* scriplinks-related: */
|
/* scriplinks-related: */
|
||||||
PyObject *EXPP_getScriptLinks(ScriptLink *slink, PyObject *args, int is_scene);
|
PyObject *EXPP_getScriptLinks(ScriptLink *slink, PyObject *args, int is_scene);
|
||||||
PyObject *EXPP_addScriptLink(ScriptLink *slink, PyObject *args, int is_scene);
|
PyObject *EXPP_addScriptLink(ScriptLink *slink, PyObject *args, int is_scene);
|
||||||
@@ -106,3 +126,4 @@ PyObject *EXPP_clearScriptLinks(ScriptLink *slink, PyObject *args);
|
|||||||
void EXPP_allqueue(unsigned short event, short val);
|
void EXPP_allqueue(unsigned short event, short val);
|
||||||
|
|
||||||
#endif /* EXPP_gen_utils_h */
|
#endif /* EXPP_gen_utils_h */
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user