summaryrefslogtreecommitdiff
path: root/core/src/sv/include
diff options
context:
space:
mode:
authorruki <[email protected]>2017-08-14 11:27:19 +0800
committerruki <[email protected]>2017-08-14 11:29:30 +0800
commitdba45d143d8aff047da82cbe1a881056e6e4bc00 (patch)
tree7b80d5de264c17b538a7c9d0fbb234ded39ac683 /core/src/sv/include
parent34706ba053dda9dd86902cacf42a6c1878c85234 (diff)
merge repo and require codes
Diffstat (limited to 'core/src/sv/include')
-rw-r--r--core/src/sv/include/semver.h228
1 files changed, 228 insertions, 0 deletions
diff --git a/core/src/sv/include/semver.h b/core/src/sv/include/semver.h
new file mode 100644
index 000000000..bdc005702
--- /dev/null
+++ b/core/src/sv/include/semver.h
@@ -0,0 +1,228 @@
+/*
+ * This is free and unencumbered software released into the public domain.
+ *
+ * Anyone is free to copy, modify, publish, use, compile, sell, or
+ * distribute this software, either in source code form or as a compiled
+ * binary, for any purpose, commercial or non-commercial, and by any
+ * means.
+ *
+ * In jurisdictions that recognize copyright laws, the author or authors
+ * of this software dedicate any and all copyright interest in the
+ * software to the public domain. We make this dedication for the benefit
+ * of the public at large and to the detriment of our heirs and
+ * successors. We intend this dedication to be an overt act of
+ * relinquishment in perpetuity of all present and future rights to this
+ * software under copyright law.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+ * IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR
+ * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+ * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ * OTHER DEALINGS IN THE SOFTWARE.
+ *
+ * For more information, please refer to <http://unlicense.org>
+ */
+
+#ifndef SV_H__
+# define SV_H__
+
+#include <stddef.h>
+#include <stdio.h>
+#include <string.h>
+
+#ifndef SV_COMPILE
+# define SV_COMPILE (0)
+#endif
+
+#ifndef SV_BUILD_DYNAMIC_LINK
+# define SV_BUILD_DYNAMIC_LINK (0)
+#endif
+
+#if SV_BUILD_DYNAMIC_LINK && defined(_MSC_VER)
+# define SV_EXPORT_LINK __declspec(dllexport)
+# define SV_IMPORT_LINK __declspec(dllimport)
+#else
+# define SV_EXPORT_LINK
+# define SV_IMPORT_LINK
+#endif
+#if SV_COMPILE
+# ifdef __cplusplus
+# define SV_API extern "C" SV_EXPORT_LINK
+# else
+# define SV_API extern SV_EXPORT_LINK
+# endif
+#else
+# ifdef __cplusplus
+# define SV_API extern "C" SV_IMPORT_LINK
+# else
+# define SV_API extern SV_IMPORT_LINK
+# endif
+#endif
+
+#ifndef __cplusplus
+# if defined(_MSC_VER) && _MSC_VER < 1900
+# define bool unsigned char
+# define true 1
+# define false 0
+# define __bool_true_false_are_defined 1
+# else
+# include <stdbool.h>
+# endif
+#endif
+
+#if defined(_MSC_VER)
+typedef __int8 int8_t;
+typedef __int16 int16_t;
+typedef __int32 int32_t;
+typedef __int64 int64_t;
+typedef unsigned __int8 uint8_t;
+typedef unsigned __int16 uint16_t;
+typedef unsigned __int32 uint32_t;
+typedef unsigned __int64 uint64_t;
+#ifdef _WIN64
+typedef __int64 intptr_t;
+typedef unsigned __int64 uintptr_t;
+#else
+typedef __int32 intptr_t;
+typedef unsigned __int32 uintptr_t;
+#endif
+#else
+# include <stdint.h>
+#endif
+
+#ifndef sv_malloc
+# define sv_malloc malloc
+#endif
+
+#ifndef sv_free
+# define sv_free free
+#endif
+
+#define SEMVER_NUM_X (-1)
+
+#define semver(self, str) semvern(self, str, strlen(str))
+#define semver_write(self, buffer, len) semver_pwrite(&(self), buffer, len)
+#define semver_cmp(self, other) semver_pcmp(&(self), &(other))
+#define semver_comp(self, str) semver_compn(self, str, strlen(str))
+#define semver_comp_write(self, buffer, len) semver_comp_pwrite(&(self), buffer, len)
+#define semver_comp_match(self, comp) semver_comp_pmatch(&(self), &(comp))
+#define semver_match(self, comp_str) semver_comp_matchn(&(self), comp_str, strlen(comp_str))
+#define semver_range(self, str) semver_rangen(self, str, strlen(str))
+#define semver_range_write(self, buffer, len) semver_range_pwrite(&(self), buffer, len)
+#define semver_range_match(self, range) semver_range_pmatch(&(self), &(range))
+#define semver_rmatch(self, range_str) semver_range_matchn(&(self), range_str, strlen(range_str))
+
+typedef struct semver semver_t;
+typedef struct semver_id semver_id_t;
+typedef struct semver_comp semver_comp_t;
+typedef struct semver_range semver_range_t;
+typedef struct semvers semvers_t;
+
+enum semver_op {
+ SEMVER_OP_EQ = 0,
+ SEMVER_OP_LT,
+ SEMVER_OP_LE,
+ SEMVER_OP_GT,
+ SEMVER_OP_GE,
+};
+
+struct semver_id {
+ bool numeric;
+ int num;
+ size_t len;
+ const char *raw;
+ struct semver_id *next;
+};
+
+struct semver {
+ int major, minor, patch;
+ semver_id_t prerelease, build;
+ size_t len;
+ const char *raw;
+};
+
+SV_API char semvern(semver_t *self, const char *str, size_t len);
+SV_API char semver_tryn(semver_t *self, const char *str, size_t len);
+SV_API void semver_dtor(semver_t *self);
+SV_API int semver_pwrite(const semver_t *self, char *buffer, size_t len);
+SV_API size_t semver_fwrite (const semver_t *self, FILE * stream);
+SV_API char semver_pcmp(const semver_t *self, const semver_t *other);
+SV_API bool semver_comp_pmatch(const semver_t *self, const semver_comp_t *comp);
+SV_API bool semver_comp_matchn(const semver_t *self, const char *comp_str, size_t comp_len);
+SV_API bool semver_range_pmatch(const semver_t *self, const semver_range_t *range);
+SV_API bool semver_range_matchn(const semver_t *self, const char *range_str, size_t range_len);
+
+struct semver_comp {
+ struct semver_comp *next;
+ enum semver_op op;
+ semver_t version;
+};
+
+SV_API char semver_compn(semver_comp_t *self, const char *str, size_t len);
+SV_API void semver_comp_dtor(semver_comp_t *self);
+SV_API int semver_comp_pwrite(const semver_comp_t *self, char *buffer, size_t len);
+SV_API size_t semver_comp_fwrite (const semver_comp_t *self, FILE *stream);
+SV_API char semver_and(semver_comp_t *left, const char *str, size_t len);
+
+struct semver_range {
+ struct semver_range *next;
+ semver_comp_t comp;
+};
+
+SV_API char semver_rangen(semver_range_t *self, const char *str, size_t len);
+SV_API void semver_range_dtor(semver_range_t *self);
+SV_API int semver_range_pwrite(const semver_range_t *self, char *buffer, size_t len);
+SV_API size_t semver_range_fwrite (const semver_range_t *rangep, FILE *stream);
+SV_API char semver_or(semver_range_t *left, const char *str, size_t len);
+
+struct semvers {
+ uint32_t length, capacity;
+ semver_t *data;
+};
+
+SV_API uint32_t semvers_pgrowth(semvers_t *self, int32_t nmin);
+SV_API semver_t semvers_perase(semvers_t *self, uint32_t i);
+SV_API void semvers_psort(semvers_t *self);
+SV_API void semvers_prsort(semvers_t *self);
+SV_API void semvers_pdtor(semvers_t *self);
+SV_API void semvers_pclear(semvers_t *self);
+
+#define semvers_dtor(s) \
+ semvers_pdtor(&(s))
+
+#define semvers_clear(s) \
+ semvers_pclear(&(s))
+
+#define semvers_growth(s, n) \
+ semvers_pgrowth(&(s),n)
+
+#define semvers_grow(s, n) \
+ semvers_pgrowth(&(s),(s).length+(n))
+
+#define semvers_resize(s, n) \
+ ((s).length=semvers_growth(s, n))
+
+#define semvers_erase(s, i) \
+ semvers_perase(&(s), i)
+
+#define semvers_push(s, x) \
+ (semvers_grow(s,1),(s).data[(s).length++]=(x))
+
+#define semvers_pop(s) \
+ (s).data[--(s).length]
+
+#define semvers_unshift(s, x) \
+ (semvers_grow(s,1),memmove((s).data+1,(s).data,(s).length++*sizeof(semver_t)),(s).data[0]=(x))
+
+#define semvers_shift(s) \
+ semvers_erase(s, 0)
+
+#define semvers_sort(s) \
+ semvers_psort(&(s))
+
+#define semvers_rsort(s) \
+ semvers_prsort(&(s))
+
+#endif /* SV_H__ */