summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKacper Michajłow <kasper93@gmail.com>2023-09-01 03:07:28 +0200
committerNiklas Haas <github-daiK1o@haasn.dev>2023-10-14 12:30:46 +0200
commit4bbe9618851270eaf5a169b67bff139a65ffbbe4 (patch)
treec179e85af0181133443bfb4183a23300bca7b2d4
parent273906490d00582d26404e470731c97197c96db2 (diff)
downloadmpv-4bbe9618851270eaf5a169b67bff139a65ffbbe4.tar.bz2
mpv-4bbe9618851270eaf5a169b67bff139a65ffbbe4.tar.xz
m_property: add read_sub_validate to check if should be processed
In many cases it makes sense to early exit instead of preparing all the data only to return type or not implemented.
-rw-r--r--options/m_property.c17
-rw-r--r--options/m_property.h5
2 files changed, 22 insertions, 0 deletions
diff --git a/options/m_property.c b/options/m_property.c
index fa91fd1162..7667dd6161 100644
--- a/options/m_property.c
+++ b/options/m_property.c
@@ -432,6 +432,23 @@ int m_property_strdup_ro(int action, void* arg, const char *var)
return M_PROPERTY_NOT_IMPLEMENTED;
}
+int m_property_read_sub_validate(void *ctx, struct m_property *prop,
+ int action, void *arg)
+{
+ m_property_unkey(&action, &arg);
+ switch (action) {
+ case M_PROPERTY_GET_TYPE:
+ *(struct m_option *)arg = (struct m_option){.type = CONF_TYPE_NODE};
+ return M_PROPERTY_OK;
+ case M_PROPERTY_GET:
+ case M_PROPERTY_PRINT:
+ case M_PROPERTY_KEY_ACTION:
+ return M_PROPERTY_VALID;
+ default:
+ return M_PROPERTY_NOT_IMPLEMENTED;
+ };
+}
+
// This allows you to make a list of values (like from a struct) available
// as a number of sub-properties. The property list is set up with the current
// property values on the stack before calling this function.
diff --git a/options/m_property.h b/options/m_property.h
index 7e84abc8d7..0dce24600c 100644
--- a/options/m_property.h
+++ b/options/m_property.h
@@ -107,6 +107,9 @@ struct m_property_action_arg {
};
enum mp_property_return {
+ // Returned from validator if action should be executed.
+ M_PROPERTY_VALID = 2,
+
// Returned on success.
M_PROPERTY_OK = 1,
@@ -212,6 +215,8 @@ struct m_sub_property {
#define SUB_PROP_PTS(f) \
.type = {.type = &m_option_type_time}, .value = {.double_ = (f)}
+int m_property_read_sub_validate(void *ctx, struct m_property *prop,
+ int action, void *arg);
int m_property_read_sub(const struct m_sub_property *props, int action, void *arg);