#include "epoch.h" #include #define u128 __uint128_t typedef enum { Simple, Rapid, SemVer, Extended, } VersionKindTag; typedef struct { char hash[7]; DateTime dt; } GitRevision; typedef enum { Alpha, Beta, ReleaseCandidate, GitRev, PRNone, } PreReleaseTag; typedef enum { any, arm, arm64, loongson, mips32, mips64, powerepc, powerpc64, riscv64, s390x, sparc, sparc64, x86, x86_64, } Arch; typedef struct { PreReleaseTag tag; union { uint16_t alpha; uint16_t beta; uint16_t rc; GitRevision git; }; } PreRelease; typedef struct { VersionKindTag vk_tag; union { struct { uint16_t major; } simple; struct { uint16_t major; uint16_t minor; } rapid; struct { uint16_t major; uint16_t minor; uint16_t patch; } semver; struct { uint16_t major; uint16_t minor; uint16_t patch; uint16_t build; } extended; }; PreRelease pr; Arch arch; } Version; typedef enum { CompGreater, CompEqual, CompLess, CompNone, } Comparison; u128 u128FromVersion(Version *self); Comparison compareVersion (Version *self, Version *other); int parseVersion (Version *self, const char *s); char *versionToString(Version *self);