libyang NEW xpath evaluation
Not tested once.
diff --git a/src/tree_schema.h b/src/tree_schema.h
index da73da2..b7a8c5d 100644
--- a/src/tree_schema.h
+++ b/src/tree_schema.h
@@ -699,42 +699,46 @@
* 1 - container 6 - anydata/anyxml 11 - identity
* 2 - choice 7 - case 12 - extension
* 3 - leaf 8 - notification 13 - bitenum
- * 4 - leaflist 9 - rpc
- * 5 - list 10 - feature
+ * 4 - leaflist 9 - rpc/action 14 - when
+ * 5 - list 10 - feature 15 - must
*
- * 1 1 1 1
- * bit name 1 2 3 4 5 6 7 8 9 0 1 2 3
- * ---------------------+-+-+-+-+-+-+-+-+-+-+-+-+-+
- * 1 LYS_CONFIG_W |x|x|x|x|x|x|x| | | | | | |
- * +-+-+-+-+-+-+-+-+-+-+-+-+-+
- * 2 LYS_CONFIG_R |x|x|x|x|x|x|x| | | | | | |
- * +-+-+-+-+-+-+-+-+-+-+-+-+-+
- * 3 LYS_STATUS_CURR |x|x|x|x|x|x|x|x|x|x|x|x| |
- * +-+-+-+-+-+-+-+-+-+-+-+-+-+
- * 4 LYS_STATUS_DEPRC |x|x|x|x|x|x|x|x|x|x|x|x| |
- * +-+-+-+-+-+-+-+-+-+-+-+-+-+
- * 5 LYS_STATUS_OBSLT |x|x|x|x|x|x|x|x|x|x|x|x| |
- * +-+-+-+-+-+-+-+-+-+-+-+-+-+
- * 6 LYS_MAND_TRUE |x|x|x|x|x|x| | | | | | | |
- * +-+-+-+-+-+-+-+-+-+-+-+-+-+
- * 7 LYS_ORDBY_USER | | | |x|x| | | | | | | | |
- * LYS_MAND_FALSE | |x|x| | |x| | | | | | | |
- * +-+-+-+-+-+-+-+-+-+-+-+-+-+
- * 8 LYS_ORDBY_SYSTEM | | | |x|x| | | | | | | | |
- * LYS_PRESENCE |x| | | | | | | | | | | | |
- * LYS_UNIQUE | | |x| | | | | | | | | | |
- * +-+-+-+-+-+-+-+-+-+-+-+-+-+
- * 9 LYS_KEY | | |x| | | | | | | | | | |
- * LYS_FENABLED | | | | | | | | | |x| | | |
- * +-+-+-+-+-+-+-+-+-+-+-+-+-+
- * 10 LYS_SET_DFLT | | |x|x| | |x| | | | | | |
- * LYS_ISENUM | | | | | | | | | | | | |x|
- * LYS_KEYLESS | | | | |x| | | | | | | | |
- * +-+-+-+-+-+-+-+-+-+-+-+-+-+
- * 11 LYS_SET_UNITS | | |x|x| | | | | | | | | |
- * +-+-+-+-+-+-+-+-+-+-+-+-+-+
- * 12 LYS_SET_CONFIG |x|x|x|x|x|x| | | | | | | |
- * ---------------------+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * 1 1 1 1 1 1
+ * bit name 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5
+ * ---------------------+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * 1 LYS_CONFIG_W |x|x|x|x|x|x|x| | | | | | | | |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * 2 LYS_CONFIG_R |x|x|x|x|x|x|x| | | | | | | | |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * 3 LYS_STATUS_CURR |x|x|x|x|x|x|x|x|x|x|x|x| | | |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * 4 LYS_STATUS_DEPRC |x|x|x|x|x|x|x|x|x|x|x|x| | | |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * 5 LYS_STATUS_OBSLT |x|x|x|x|x|x|x|x|x|x|x|x| | | |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * 6 LYS_MAND_TRUE |x|x|x|x|x|x| | | | | | | | | |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * 7 LYS_ORDBY_USER | | | |x|x| | | | | | | | | | |
+ * LYS_MAND_FALSE | |x|x| | |x| | | | | | | | | |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * 8 LYS_ORDBY_SYSTEM | | | |x|x| | | | | | | | | | |
+ * LYS_PRESENCE |x| | | | | | | | | | | | | | |
+ * LYS_UNIQUE | | |x| | | | | | | | | | | | |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * 9 LYS_KEY | | |x| | | | | | | | | | | | |
+ * LYS_FENABLED | | | | | | | | | |x| | | | | |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * 10 LYS_SET_DFLT | | |x|x| | |x| | | | | | | | |
+ * LYS_ISENUM | | | | | | | | | | | | |x| | |
+ * LYS_KEYLESS | | | | |x| | | | | | | | | | |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * 11 LYS_SET_UNITS | | |x|x| | | | | | | | | | | |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * 12 LYS_SET_CONFIG |x|x|x|x|x|x| | | | | | | | | |
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * 13 LYS_XPATH_DEP |x|x|x|x|x|x|x|x| | | | | |x|x|
+ * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ * 14 LYS_LEAFREF_DEP | | |x|x| | | | | | | | | | | |
+ * ---------------------+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
*
*/
@@ -796,6 +800,9 @@
#define LYS_SET_UNITS 0x0400 /**< flag to know if the leaf's/leaflist's units are their own (flag set) or it is taken from the type. */
#define LYS_SET_CONFIG 0x0800 /**< flag to know if the config property was set explicitly (flag set) or it is inherited. */
+#define LYS_XPATH_DEP 0x1000 /**< flag for nodes with when/must with external data dependency. */
+#define LYS_LEAFREF_DEP 0x2000 /**< flag for leaves(-lists) with leafref with external dependency. */
+
#define LYS_SINGLEQUOTED 0x100 /**< flag for single-quoted argument of an extension instance's substatement, only when the source is YANG */
#define LYS_DOUBLEQUOTED 0x200 /**< flag for double-quoted argument of an extension instance's substatement, only when the source is YANG */
@@ -1163,6 +1170,7 @@
const char *ref; /**< reference */
struct lysc_ext_instance *exts; /**< list of the extension instances ([sized array](@ref sizedarrays)) */
uint32_t refcount; /**< reference counter since some of the when statements are shared among several nodes */
+ uint16_t flags; /**< [schema node flags](@ref snodeflags) - only LYS_XPATH_DEP is allowed */
};
/**
@@ -1254,6 +1262,7 @@
const char *emsg; /**< error-message */
const char *eapptag; /**< error-app-tag value */
struct lysc_ext_instance *exts; /**< list of the extension instances ([sized array](@ref sizedarrays)) */
+ uint16_t flags; /**< [schema node flags](@ref snodeflags) - only LYS_XPATH_DEP is allowed */
};
struct lysc_type {
@@ -1339,7 +1348,7 @@
struct lysc_type_plugin *plugin; /**< type's plugin with built-in as well as user functions to canonize or validate the value of the type */
LY_DATA_TYPE basetype; /**< Base type of the type */
uint32_t refcount; /**< reference counter for type sharing */
- const char* path; /**< target path */
+ const char *path; /**< target path */
struct lys_module *path_context; /**< module where the path is defined, so it provides context to resolve prefixes */
struct lysc_type *realtype; /**< pointer to the real (first non-leafref in possible leafrefs chain) type. */
uint8_t require_instance; /**< require-instance flag */
@@ -1732,6 +1741,13 @@
int lysc_feature_value(const struct lysc_feature *feature);
/**
+ * @brief Types of the different schema paths.
+ */
+typedef enum {
+ LYSC_PATH_LOG /**< Descriptive path format used in log messages */
+} LYSC_PATH_TYPE;
+
+/**
* @brief Generate path of the given node in the requested format.
*
* @param[in] node Schema path of this node will be generated.
@@ -1742,7 +1758,7 @@
* @return NULL in case of memory allocation error, path of the node otherwise.
* In case the @p buffer is NULL, the returned string is dynamically allocated and caller is responsible to free it.
*/
-char *lysc_path(struct lysc_node *node, LY_PATH_TYPE pathtype, char *buffer, size_t buflen);
+char *lysc_path(const struct lysc_node *node, LYSC_PATH_TYPE pathtype, char *buffer, size_t buflen);
/**
* @brief Available YANG schema tree structures representing YANG module.