diff options
author | Campbell Barton <ideasman42@gmail.com> | 2015-02-15 03:26:31 +0300 |
---|---|---|
committer | Campbell Barton <ideasman42@gmail.com> | 2015-02-15 06:01:59 +0300 |
commit | a9d979c8ef2b6de25c1953da341dd5e207416540 (patch) | |
tree | 8647bedb1815977967694b302e9d6d2fd98573e6 /source/blender/python/mathutils/mathutils.h | |
parent | ce85aef0d9f2df094f2859236dc75a2c7f70bfcd (diff) |
mathutils: add freeze() method, is_frozen attr
This allows you to make any mathutils object immutable.
Diffstat (limited to 'source/blender/python/mathutils/mathutils.h')
-rw-r--r-- | source/blender/python/mathutils/mathutils.h | 21 |
1 files changed, 21 insertions, 0 deletions
diff --git a/source/blender/python/mathutils/mathutils.h b/source/blender/python/mathutils/mathutils.h index 296b8cf9559..03ce9af3f49 100644 --- a/source/blender/python/mathutils/mathutils.h +++ b/source/blender/python/mathutils/mathutils.h @@ -34,6 +34,7 @@ struct DynStr; extern char BaseMathObject_is_wrapped_doc[]; +extern char BaseMathObject_is_frozen_doc[]; extern char BaseMathObject_owner_doc[]; #define BASE_MATH_NEW(struct_name, root_type, base_type) \ @@ -43,6 +44,7 @@ extern char BaseMathObject_owner_doc[]; /* BaseMathObject.flag */ enum { BASE_MATH_FLAG_IS_WRAP = (1 << 0), + BASE_MATH_FLAG_IS_FROZEN = (1 << 1), }; #define BASE_MATH_FLAG_DEFAULT 0 @@ -69,6 +71,10 @@ typedef struct { PyObject *BaseMathObject_owner_get(BaseMathObject *self, void *); PyObject *BaseMathObject_is_wrapped_get(BaseMathObject *self, void *); +PyObject *BaseMathObject_is_frozen_get(BaseMathObject *self, void *); + +extern char BaseMathObject_freeze_doc[]; +PyObject *BaseMathObject_freeze(BaseMathObject *self); int BaseMathObject_traverse(BaseMathObject *self, visitproc visit, void *arg); int BaseMathObject_clear(BaseMathObject *self); @@ -102,6 +108,8 @@ int _BaseMathObject_WriteCallback(BaseMathObject *self); int _BaseMathObject_ReadIndexCallback(BaseMathObject *self, int index); int _BaseMathObject_WriteIndexCallback(BaseMathObject *self, int index); +void _BaseMathObject_RaiseFrozenExc(const BaseMathObject *self); + /* since this is called so often avoid where possible */ #define BaseMath_ReadCallback(_self) \ (((_self)->cb_user ? _BaseMathObject_ReadCallback((BaseMathObject *)_self):0)) @@ -112,6 +120,19 @@ int _BaseMathObject_WriteIndexCallback(BaseMathObject *self, int index); #define BaseMath_WriteIndexCallback(_self, _index) \ (((_self)->cb_user ? _BaseMathObject_WriteIndexCallback((BaseMathObject *)_self, _index):0)) +/* support BASE_MATH_FLAG_IS_FROZEN */ +#define BaseMath_ReadCallback_ForWrite(_self) \ + (UNLIKELY((_self)->flag & BASE_MATH_FLAG_IS_FROZEN) ? \ + (_BaseMathObject_RaiseFrozenExc((BaseMathObject *)_self), -1) : (BaseMath_ReadCallback(_self))) + +#define BaseMath_ReadIndexCallback_ForWrite(_self, _index) \ + (UNLIKELY((_self)->flag & BASE_MATH_FLAG_IS_FROZEN) ? \ + (_BaseMathObject_RaiseFrozenExc((BaseMathObject *)_self), -1) : (BaseMath_ReadIndexCallback(_self, _index))) + +#define BaseMath_Prepare_ForWrite(_self) \ + (UNLIKELY((_self)->flag & BASE_MATH_FLAG_IS_FROZEN) ? \ + (_BaseMathObject_RaiseFrozenExc((BaseMathObject *)_self), -1) : 0) + /* utility func */ int mathutils_array_parse(float *array, int array_min, int array_max, PyObject *value, const char *error_prefix); int mathutils_array_parse_alloc(float **array, int array_min, PyObject *value, const char *error_prefix); |