diff options
author | dec05eba <dec05eba@protonmail.com> | 2018-10-18 07:05:43 +0200 |
---|---|---|
committer | dec05eba <dec05eba@protonmail.com> | 2020-07-06 07:39:33 +0200 |
commit | 6bb79ef033c2a2e8f12c9da6409e3547af40417c (patch) | |
tree | 6fe6c5bea99cc0b38af92a7aa4714e5614de4868 /include/VersionParser.hpp | |
parent | 4e38f2af2b97850ec5b395d4e0ea8310e664e52f (diff) |
Use ranges for dependency version
Diffstat (limited to 'include/VersionParser.hpp')
-rw-r--r-- | include/VersionParser.hpp | 51 |
1 files changed, 51 insertions, 0 deletions
diff --git a/include/VersionParser.hpp b/include/VersionParser.hpp new file mode 100644 index 0000000..eba4d33 --- /dev/null +++ b/include/VersionParser.hpp @@ -0,0 +1,51 @@ +#pragma once + +#include "types.hpp" +#include "Version.hpp" +#include "Result.hpp" +#include "StringView.hpp" +#include <string> + +namespace sibs +{ + Result<PackageVersion> parsePackageVersion(const StringView &versionStr, int *size); + + enum class VersionToken + { + NONE, + END_OF_FILE, + INVALID, + OPERATION, + AND, + VERSION_NUMBER + }; + + struct VersionTokenizer + { + VersionTokenizer(); + VersionTokenizer(const char *start, const usize size); + VersionTokenizer(const VersionTokenizer &other); + VersionToken next(); + + + const char *start; + const char *code; + usize size; + usize index; + PackageVersion version; + VersionOperation operation; + StringView identifier; + std::string errMsg; + }; + + struct VersionParser + { + Result<PackageVersionRange> parse(const char *code, const usize size); + + VersionTokenizer tokenizer; + PackageVersionRange versionRange; + private: + VersionToken parseStart(); + VersionToken parseEnd(); + }; +}
\ No newline at end of file |