diff options
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 |