diff options
author | Ambroz Bizjak <ambrop7@gmail.com> | 2014-11-09 13:13:00 +0300 |
---|---|---|
committer | Ambroz Bizjak <ambrop7@gmail.com> | 2014-11-09 13:13:13 +0300 |
commit | a4e1f32684003f57f12e7741a7375d69275fb018 (patch) | |
tree | 0c88ffe244b8f100bb620e47a3a0437ddbb044a2 | |
parent | 79c871900d67cbc0fa7f4a5f7d302057b6dcf998 (diff) |
ncd: Moving code around.ncd-functions
-rw-r--r-- | ncd/CMakeLists.txt | 1 | ||||
-rw-r--r-- | ncd/extra/func_utils.h | 70 | ||||
-rw-r--r-- | ncd/extra/value_utils.c | 195 | ||||
-rw-r--r-- | ncd/extra/value_utils.h | 148 | ||||
-rw-r--r-- | ncd/modules/basic_functions.c | 1 |
5 files changed, 209 insertions, 206 deletions
diff --git a/ncd/CMakeLists.txt b/ncd/CMakeLists.txt index 8c147ce..35758ab 100644 --- a/ncd/CMakeLists.txt +++ b/ncd/CMakeLists.txt @@ -100,6 +100,7 @@ set(NCDINTERPRETER_SOURCES NCDMethodIndex.c extra/BEventLock.c extra/NCDBuf.c + extra/value_utils.c modules/var.c modules/list.c modules/depend.c diff --git a/ncd/extra/func_utils.h b/ncd/extra/func_utils.h deleted file mode 100644 index 4336adb..0000000 --- a/ncd/extra/func_utils.h +++ /dev/null @@ -1,70 +0,0 @@ -/** - * @file func_utils.h - * @author Ambroz Bizjak <ambrop7@gmail.com> - * - * @section LICENSE - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. Neither the name of the author nor the - * names of its contributors may be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#ifndef NCD_FUNC_UTILS_H -#define NCD_FUNC_UTILS_H - -#include <stddef.h> - -#include <misc/debug.h> -#include <ncd/NCDVal.h> -#include <ncd/NCDEvaluator.h> - -static int ncd_eval_func_args_ext (NCDEvaluatorArgs args, size_t start, size_t count, NCDValMem *mem, NCDValRef *out) -{ - ASSERT(start <= NCDEvaluatorArgs_Count(&args)) - ASSERT(count <= NCDEvaluatorArgs_Count(&args) - start) - - *out = NCDVal_NewList(mem, count); - if (NCDVal_IsInvalid(*out)) { - goto fail; - } - - for (size_t i = 0; i < count; i++) { - NCDValRef elem; - if (!NCDEvaluatorArgs_EvalArg(&args, start + i, mem, &elem)) { - goto fail; - } - if (!NCDVal_ListAppend(*out, elem)) { - goto fail; - } - } - - return 1; - -fail: - return 0; -} - -static int ncd_eval_func_args (NCDEvaluatorArgs args, NCDValMem *mem, NCDValRef *out) -{ - return ncd_eval_func_args_ext(args, 0, NCDEvaluatorArgs_Count(&args), mem, out); -} - -#endif diff --git a/ncd/extra/value_utils.c b/ncd/extra/value_utils.c new file mode 100644 index 0000000..7194e3d --- /dev/null +++ b/ncd/extra/value_utils.c @@ -0,0 +1,195 @@ +/** + * @file value_utils.c + * @author Ambroz Bizjak <ambrop7@gmail.com> + * + * @section LICENSE + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the author nor the + * names of its contributors may be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY + * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#include <stdint.h> +#include <stddef.h> +#include <limits.h> + +#include <misc/debug.h> +#include <misc/parse_number.h> +#include <misc/strdup.h> +#include <misc/balloc.h> +#include <system/BTime.h> +#include <ncd/NCDVal.h> +#include <ncd/NCDStringIndex.h> +#include <ncd/NCDEvaluator.h> +#include <ncd/static_strings.h> + +#include "value_utils.h" + +int ncd_is_none (NCDValRef string) +{ + ASSERT(NCDVal_IsString(string)) + + if (NCDVal_IsIdString(string)) { + return NCDVal_IdStringId(string) == NCD_STRING_NONE; + } else { + return NCDVal_StringEquals(string, "<none>"); + } +} + +NCDValRef ncd_make_boolean (NCDValMem *mem, int value, NCDStringIndex *string_index) +{ + ASSERT(mem) + ASSERT(string_index) + + NCD_string_id_t str_id = (value ? NCD_STRING_TRUE : NCD_STRING_FALSE); + return NCDVal_NewIdString(mem, str_id, string_index); +} + +int ncd_read_boolean (NCDValRef string) +{ + ASSERT(NCDVal_IsString(string)) + + if (NCDVal_IsIdString(string)) { + return NCDVal_IdStringId(string) == NCD_STRING_TRUE; + } else { + return NCDVal_StringEquals(string, "true"); + } +} + +int ncd_read_uintmax (NCDValRef string, uintmax_t *out) +{ + ASSERT(NCDVal_IsString(string)) + ASSERT(out) + + size_t length = NCDVal_StringLength(string); + + if (NCDVal_IsContinuousString(string)) { + return parse_unsigned_integer_bin(NCDVal_StringData(string), length, out); + } + + b_cstring cstr = NCDVal_StringCstring(string); + + return parse_unsigned_integer_cstr(cstr, 0, cstr.length, out); +} + +int ncd_read_time (NCDValRef string, btime_t *out) +{ + ASSERT(NCDVal_IsString(string)) + ASSERT(out) + + uintmax_t n; + if (!ncd_read_uintmax(string, &n)) { + return 0; + } + + if (n > INT64_MAX) { + return 0; + } + + *out = n; + return 1; +} + +NCD_string_id_t ncd_get_string_id (NCDValRef string, NCDStringIndex *string_index) +{ + ASSERT(NCDVal_IsString(string)) + ASSERT(string_index) + + if (NCDVal_IsIdString(string)) { + return NCDVal_IdStringId(string); + } else if (NCDVal_IsContinuousString(string)) { + return NCDStringIndex_GetBin(string_index, NCDVal_StringData(string), NCDVal_StringLength(string)); + } + + b_cstring cstr = NCDVal_StringCstring(string); + + char *temp = b_cstring_strdup(cstr, 0, cstr.length); + if (!temp) { + return -1; + } + + NCD_string_id_t res = NCDStringIndex_GetBin(string_index, temp, cstr.length); + BFree(temp); + + return res; +} + +NCDValRef ncd_make_uintmax (NCDValMem *mem, uintmax_t value) +{ + ASSERT(mem) + + int size = compute_decimal_repr_size(value); + + NCDValRef val = NCDVal_NewStringUninitialized(mem, size); + + if (!NCDVal_IsInvalid(val)) { + char *data = (char *)NCDVal_StringData(val); + generate_decimal_repr(value, data, size); + } + + return val; +} + +char * ncd_strdup (NCDValRef stringnonulls) +{ + ASSERT(NCDVal_IsStringNoNulls(stringnonulls)) + + size_t length = NCDVal_StringLength(stringnonulls); + + if (NCDVal_IsContinuousString(stringnonulls)) { + return b_strdup_bin(NCDVal_StringData(stringnonulls), length); + } + + b_cstring cstr = NCDVal_StringCstring(stringnonulls); + + return b_cstring_strdup(cstr, 0, cstr.length); +} + +int ncd_eval_func_args_ext (NCDEvaluatorArgs args, size_t start, size_t count, NCDValMem *mem, NCDValRef *out) +{ + ASSERT(start <= NCDEvaluatorArgs_Count(&args)) + ASSERT(count <= NCDEvaluatorArgs_Count(&args) - start) + + *out = NCDVal_NewList(mem, count); + if (NCDVal_IsInvalid(*out)) { + goto fail; + } + + for (size_t i = 0; i < count; i++) { + NCDValRef elem; + if (!NCDEvaluatorArgs_EvalArg(&args, start + i, mem, &elem)) { + goto fail; + } + if (!NCDVal_ListAppend(*out, elem)) { + goto fail; + } + } + + return 1; + +fail: + return 0; +} + +int ncd_eval_func_args (NCDEvaluatorArgs args, NCDValMem *mem, NCDValRef *out) +{ + return ncd_eval_func_args_ext(args, 0, NCDEvaluatorArgs_Count(&args), mem, out); +} diff --git a/ncd/extra/value_utils.h b/ncd/extra/value_utils.h index 2d01148..837305e 100644 --- a/ncd/extra/value_utils.h +++ b/ncd/extra/value_utils.h @@ -31,144 +31,22 @@ #define NCD_VALUE_UTILS_H #include <stdint.h> -#include <limits.h> +#include <stddef.h> -#include <misc/debug.h> -#include <misc/parse_number.h> -#include <misc/strdup.h> -#include <misc/balloc.h> #include <system/BTime.h> #include <ncd/NCDVal.h> #include <ncd/NCDStringIndex.h> -#include <ncd/static_strings.h> - -static int ncd_is_none (NCDValRef val); -static NCDValRef ncd_make_boolean (NCDValMem *mem, int value, NCDStringIndex *string_index); -static int ncd_read_boolean (NCDValRef val); -static int ncd_read_uintmax (NCDValRef string, uintmax_t *out) WARN_UNUSED; -static int ncd_read_time (NCDValRef string, btime_t *out) WARN_UNUSED; -static NCD_string_id_t ncd_get_string_id (NCDValRef string, NCDStringIndex *string_index); -static NCDValRef ncd_make_uintmax (NCDValMem *mem, uintmax_t value); -static char * ncd_strdup (NCDValRef stringnonulls); - -static int ncd_is_none (NCDValRef string) -{ - ASSERT(NCDVal_IsString(string)) - - if (NCDVal_IsIdString(string)) { - return NCDVal_IdStringId(string) == NCD_STRING_NONE; - } else { - return NCDVal_StringEquals(string, "<none>"); - } -} - -static NCDValRef ncd_make_boolean (NCDValMem *mem, int value, NCDStringIndex *string_index) -{ - ASSERT(mem) - ASSERT(string_index) - - NCD_string_id_t str_id = (value ? NCD_STRING_TRUE : NCD_STRING_FALSE); - return NCDVal_NewIdString(mem, str_id, string_index); -} - -static int ncd_read_boolean (NCDValRef string) -{ - ASSERT(NCDVal_IsString(string)) - - if (NCDVal_IsIdString(string)) { - return NCDVal_IdStringId(string) == NCD_STRING_TRUE; - } else { - return NCDVal_StringEquals(string, "true"); - } -} - -static int ncd_read_uintmax (NCDValRef string, uintmax_t *out) -{ - ASSERT(NCDVal_IsString(string)) - ASSERT(out) - - size_t length = NCDVal_StringLength(string); - - if (NCDVal_IsContinuousString(string)) { - return parse_unsigned_integer_bin(NCDVal_StringData(string), length, out); - } - - b_cstring cstr = NCDVal_StringCstring(string); - - return parse_unsigned_integer_cstr(cstr, 0, cstr.length, out); -} - -static int ncd_read_time (NCDValRef string, btime_t *out) -{ - ASSERT(NCDVal_IsString(string)) - ASSERT(out) - - uintmax_t n; - if (!ncd_read_uintmax(string, &n)) { - return 0; - } - - if (n > INT64_MAX) { - return 0; - } - - *out = n; - return 1; -} - -static NCD_string_id_t ncd_get_string_id (NCDValRef string, NCDStringIndex *string_index) -{ - ASSERT(NCDVal_IsString(string)) - ASSERT(string_index) - - if (NCDVal_IsIdString(string)) { - return NCDVal_IdStringId(string); - } else if (NCDVal_IsContinuousString(string)) { - return NCDStringIndex_GetBin(string_index, NCDVal_StringData(string), NCDVal_StringLength(string)); - } - - b_cstring cstr = NCDVal_StringCstring(string); - - char *temp = b_cstring_strdup(cstr, 0, cstr.length); - if (!temp) { - return -1; - } - - NCD_string_id_t res = NCDStringIndex_GetBin(string_index, temp, cstr.length); - BFree(temp); - - return res; -} - -static NCDValRef ncd_make_uintmax (NCDValMem *mem, uintmax_t value) -{ - ASSERT(mem) - - int size = compute_decimal_repr_size(value); - - NCDValRef val = NCDVal_NewStringUninitialized(mem, size); - - if (!NCDVal_IsInvalid(val)) { - char *data = (char *)NCDVal_StringData(val); - generate_decimal_repr(value, data, size); - } - - return val; -} - -static char * ncd_strdup (NCDValRef stringnonulls) -{ - ASSERT(NCDVal_IsStringNoNulls(stringnonulls)) - - size_t length = NCDVal_StringLength(stringnonulls); - - if (NCDVal_IsContinuousString(stringnonulls)) { - return b_strdup_bin(NCDVal_StringData(stringnonulls), length); - } - - b_cstring cstr = NCDVal_StringCstring(stringnonulls); - - return b_cstring_strdup(cstr, 0, cstr.length); -} +#include <ncd/NCDEvaluator.h> + +int ncd_is_none (NCDValRef val); +NCDValRef ncd_make_boolean (NCDValMem *mem, int value, NCDStringIndex *string_index); +int ncd_read_boolean (NCDValRef val); +int ncd_read_uintmax (NCDValRef string, uintmax_t *out) WARN_UNUSED; +int ncd_read_time (NCDValRef string, btime_t *out) WARN_UNUSED; +NCD_string_id_t ncd_get_string_id (NCDValRef string, NCDStringIndex *string_index); +NCDValRef ncd_make_uintmax (NCDValMem *mem, uintmax_t value); +char * ncd_strdup (NCDValRef stringnonulls); +int ncd_eval_func_args_ext (NCDEvaluatorArgs args, size_t start, size_t count, NCDValMem *mem, NCDValRef *out) WARN_UNUSED; +int ncd_eval_func_args (NCDEvaluatorArgs args, NCDValMem *mem, NCDValRef *out) WARN_UNUSED; #endif diff --git a/ncd/modules/basic_functions.c b/ncd/modules/basic_functions.c index 8e2f70e..cf6ddbc 100644 --- a/ncd/modules/basic_functions.c +++ b/ncd/modules/basic_functions.c @@ -28,7 +28,6 @@ */ #include <misc/expstring.h> -#include <ncd/extra/func_utils.h> #include <ncd/module_common.h> |