* xmlXPathCastToNumberInternal: * @ctxt: parser context * @val: an XPath object * * Converts an XPath object to its number value * * Returns the number value */
| 1990 | * Returns the number value |
| 1991 | */ |
| 1992 | static double |
| 1993 | xmlXPathCastToNumberInternal(xmlXPathParserContextPtr ctxt, |
| 1994 | xmlXPathObjectPtr val) { |
| 1995 | double ret = 0.0; |
| 1996 | |
| 1997 | if (val == NULL) |
| 1998 | return(xmlXPathNAN); |
| 1999 | switch (val->type) { |
| 2000 | case XPATH_UNDEFINED: |
| 2001 | ret = xmlXPathNAN; |
| 2002 | break; |
| 2003 | case XPATH_NODESET: |
| 2004 | case XPATH_XSLT_TREE: { |
| 2005 | xmlChar *str; |
| 2006 | |
| 2007 | str = xmlXPathCastNodeSetToString(val->nodesetval); |
| 2008 | if (str == NULL) { |
| 2009 | xmlXPathPErrMemory(ctxt); |
| 2010 | ret = xmlXPathNAN; |
| 2011 | } else { |
| 2012 | ret = xmlXPathCastStringToNumber(str); |
| 2013 | xmlFree(str); |
| 2014 | } |
| 2015 | break; |
| 2016 | } |
| 2017 | case XPATH_STRING: |
| 2018 | ret = xmlXPathCastStringToNumber(val->stringval); |
| 2019 | break; |
| 2020 | case XPATH_NUMBER: |
| 2021 | ret = val->floatval; |
| 2022 | break; |
| 2023 | case XPATH_BOOLEAN: |
| 2024 | ret = xmlXPathCastBooleanToNumber(val->boolval); |
| 2025 | break; |
| 2026 | case XPATH_USERS: |
| 2027 | #ifdef LIBXML_XPTR_LOCS_ENABLED |
| 2028 | case XPATH_POINT: |
| 2029 | case XPATH_RANGE: |
| 2030 | case XPATH_LOCATIONSET: |
| 2031 | #endif /* LIBXML_XPTR_LOCS_ENABLED */ |
| 2032 | /* TODO */ |
| 2033 | ret = xmlXPathNAN; |
| 2034 | break; |
| 2035 | } |
| 2036 | return(ret); |
| 2037 | } |
| 2038 | |
| 2039 | /** |
| 2040 | * valuePop: |
no test coverage detected