diff options
author | Sybren A. Stüvel <sybren@blender.org> | 2020-10-02 19:56:25 +0300 |
---|---|---|
committer | Sybren A. Stüvel <sybren@blender.org> | 2020-10-02 19:56:25 +0300 |
commit | 90a27d5aa91a1b6a25ea14e11c889d47f77f4cf7 (patch) | |
tree | 3916b5139f9e48ca543a1f017f82b62101dd717a /source/blender/blenkernel/BKE_context.h | |
parent | 0db98b214d468864630fc9bba72be4ff9b2548e5 (diff) |
Cleanup: Use enum for return values in context callbacks
Define enum `eContextResult` and use its values for returns, instead of
just returning 1, 0, or -1 (and always having some comment that explains
what -1 means).
This also cleans up the mixup between returning `0` and `false`, and `1`
and `true`. An inconsistency was discovered during this cleanup, and
marked with `TODO(sybren)`. It's not fixed here, as it would consititute
a functional change.
The enum isn't used everywhere, as enums in C and C++ can have different
storage sizes. To prevent issues, callback functions are still declared
as returning`int`. To at least make things easier to understand for
humans, I marked those with `int /*eContextResult*/`.
This is a followup of D9090, and is intended to unify how context
callbacks return values. This will make it easier to extend the approach
in D9090 to those functions.
No functional changes.
Differential Revision: https://developer.blender.org/D9095
Diffstat (limited to 'source/blender/blenkernel/BKE_context.h')
-rw-r--r-- | source/blender/blenkernel/BKE_context.h | 25 |
1 files changed, 21 insertions, 4 deletions
diff --git a/source/blender/blenkernel/BKE_context.h b/source/blender/blenkernel/BKE_context.h index f3e4a18b9bd..5c534803781 100644 --- a/source/blender/blenkernel/BKE_context.h +++ b/source/blender/blenkernel/BKE_context.h @@ -74,9 +74,26 @@ typedef struct bContext bContext; struct bContextDataResult; typedef struct bContextDataResult bContextDataResult; -typedef int (*bContextDataCallback)(const bContext *C, - const char *member, - bContextDataResult *result); +/* Result of context lookups. + * The specific values are important, and used implicitly in ctx_data_get(). Some functions also + * still accept/return `int` instead, to ensure that the compiler uses the correct storage size + * when mixing C/C++ code. */ +typedef enum eContextResult { + /* The context member was found, and its data is available. */ + CTX_RESULT_OK = 1, + + /* The context member was not found. */ + CTX_RESULT_MEMBER_NOT_FOUND = 0, + + /* The context member was found, but its data is not available. + * For example, "active_bone" is a valid context member, but has not data in Object mode. */ + CTX_RESULT_NO_DATA = -1, +} eContextResult; + +/* Function mapping a context member name to its value. */ +typedef int /*eContextResult*/ (*bContextDataCallback)(const bContext *C, + const char *member, + bContextDataResult *result); typedef struct bContextStoreEntry { struct bContextStoreEntry *next, *prev; @@ -213,7 +230,7 @@ ListBase CTX_data_dir_get_ex(const bContext *C, const bool use_rna, const bool use_all); ListBase CTX_data_dir_get(const bContext *C); -int CTX_data_get( +int /*eContextResult*/ CTX_data_get( const bContext *C, const char *member, PointerRNA *r_ptr, ListBase *r_lb, short *r_type); void CTX_data_id_pointer_set(bContextDataResult *result, struct ID *id); |