/* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #ifndef AXIOM_XPATH_INTERNALS_H #define AXIOM_XPATH_INTERNALS_H #ifdef __cplusplus extern "C" { #endif /** * @defgroup axiom_xpath_internals internals * @ingroup axiom_xpath * @{ */ /** Get operation at index ind */ #define AXIOM_XPATH_OPR_GET(ind) (axiom_xpath_operation_t *) \ axutil_array_list_get(context->expr->operations, context->env, ind) /** * An error has occured while parsing */ #define AXIOM_XPATH_PARSE_ERROR -2 /** * XPath expression was successfully compiled */ #define AXIOM_XPATH_PARSE_SUCCESS 0 /** * End of expression reached */ #define AXIOM_XPATH_PARSE_END -1 /* Types */ /** * XPath operation * Contains the operands and parameters */ typedef struct axiom_xpath_operation axiom_xpath_operation_t; /** * XPath node test * Stores the components of a node test */ typedef struct axiom_xpath_node_test axiom_xpath_node_test_t; /** * Functions to process a XPath operator */ typedef int (*axiom_xpath_operator_t)(axiom_xpath_context_t *context, axiom_xpath_operation_t * op); /** * Functions to iterate through different XPath axes */ typedef int (*axiom_xpath_iterator_t)(axiom_xpath_context_t *context, int op_node_test, int op_next, int op_predicate); /** * XPath node test types */ typedef enum axiom_xpath_node_test_type_t { AXIOM_XPATH_NODE_TEST_NONE = 0, AXIOM_XPATH_NODE_TEST_ALL, AXIOM_XPATH_NODE_TYPE_COMMENT, AXIOM_XPATH_NODE_TYPE_NODE, AXIOM_XPATH_NODE_TYPE_PI, AXIOM_XPATH_NODE_TYPE_TEXT, AXIOM_XPATH_NODE_TEST_STANDARD } axiom_xpath_node_test_type_t; /** * XPath operations */ typedef enum axiom_xpath_operation_type_t { AXIOM_XPATH_OPERATION_ROOT_NODE = 0, AXIOM_XPATH_OPERATION_CONTEXT_NODE, AXIOM_XPATH_OPERATION_NODE_TEST, AXIOM_XPATH_OPERATION_STEP, AXIOM_XPATH_OPERATION_RESULT, AXIOM_XPATH_OPERATION_UNION, AXIOM_XPATH_OPERATION_EQUAL_EXPR, AXIOM_XPATH_OPERATION_AND_EXPR, AXIOM_XPATH_OPERATION_OR_EXPR, AXIOM_XPATH_OPERATION_PREDICATE, AXIOM_XPATH_OPERATION_LITERAL, AXIOM_XPATH_OPERATION_NUMBER, AXIOM_XPATH_OPERATION_PATH_EXPRESSION, AXIOM_XPATH_OPERATION_FUNCTION_CALL, AXIOM_XPATH_OPERATION_ARGUMENT } axiom_xpath_operation_type_t; /** * XPath axes */ typedef enum axiom_xpath_axis_t { AXIOM_XPATH_AXIS_NONE = -1, AXIOM_XPATH_AXIS_CHILD, AXIOM_XPATH_AXIS_DESCENDANT, AXIOM_XPATH_AXIS_PARENT, AXIOM_XPATH_AXIS_ANCESTOR, AXIOM_XPATH_AXIS_FOLLOWING_SIBLING, AXIOM_XPATH_AXIS_PRECEDING_SIBLING, AXIOM_XPATH_AXIS_FOLLOWING, AXIOM_XPATH_AXIS_PRECEDING, AXIOM_XPATH_AXIS_ATTRIBUTE, AXIOM_XPATH_AXIS_NAMESPACE, AXIOM_XPATH_AXIS_SELF, AXIOM_XPATH_AXIS_DESCENDANT_OR_SELF, AXIOM_XPATH_AXIS_ANCESTOR_OR_SELF } axiom_xpath_axis_t; /** * XPath node test structure */ struct axiom_xpath_node_test { /** Node test type */ axiom_xpath_node_test_type_t type; /** Prefix * NULL if no prefix */ axis2_char_t *prefix; /** Name */ axis2_char_t *name; /** Literal for processing instruction (PI) */ axis2_char_t *lit; }; /** * XPath operation structure */ struct axiom_xpath_operation { /** Type of operator */ axiom_xpath_operation_type_t opr; /** Parameters of the operation */ void *par1; void *par2; /** Position: Used for predicate evaluation */ int pos; /** Operands pointing to other operations */ int op1; int op2; }; /** * Copies an XPath expression to a context * * No data is duplicated just the reference is assigned. * Some parameters in the expression are reset. * - pos in every operation * * @param context XPath context must not be NULL * @param expr Expression to be copied */ void axiom_xpath_expression_copy( axiom_xpath_context_t *context, axiom_xpath_expression_t* expr); /** @} */ #ifdef __cplusplus } #endif #endif