Simplify data structures
This commit is contained in:
parent
b035e0018a
commit
d67b34519f
2 changed files with 65 additions and 74 deletions
|
@ -3,28 +3,6 @@
|
|||
|
||||
#define u128 __uint128_t
|
||||
|
||||
typedef struct {
|
||||
uint16_t major;
|
||||
} __Simple;
|
||||
|
||||
typedef struct {
|
||||
uint16_t major;
|
||||
uint16_t minor;
|
||||
} __Rapid;
|
||||
|
||||
typedef struct {
|
||||
uint16_t major;
|
||||
uint16_t minor;
|
||||
uint16_t patch;
|
||||
} __SemVer;
|
||||
|
||||
typedef struct {
|
||||
uint16_t major;
|
||||
uint16_t minor;
|
||||
uint16_t patch;
|
||||
uint16_t build;
|
||||
} __Extended;
|
||||
|
||||
typedef enum {
|
||||
Simple,
|
||||
Rapid,
|
||||
|
@ -63,31 +41,39 @@ typedef enum {
|
|||
} Arch;
|
||||
|
||||
typedef struct {
|
||||
PreReleaseTag pr_tag;
|
||||
PreReleaseTag tag;
|
||||
union {
|
||||
uint16_t alpha;
|
||||
uint16_t beta;
|
||||
uint16_t rc;
|
||||
GitRevision *git;
|
||||
GitRevision git;
|
||||
};
|
||||
} PreRelease;
|
||||
|
||||
typedef struct {
|
||||
VersionKindTag vk_tag;
|
||||
VersionKindTag vk_tag;
|
||||
union {
|
||||
__Simple simple;
|
||||
__Rapid rapid;
|
||||
__SemVer semver;
|
||||
__Extended extended;
|
||||
} vk_data;
|
||||
PreReleaseTag pr_tag;
|
||||
union {
|
||||
uint16_t alpha;
|
||||
uint16_t beta;
|
||||
uint16_t rc;
|
||||
GitRevision *git;
|
||||
} pr_data;
|
||||
Arch arch;
|
||||
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 {
|
||||
|
|
77
semver.c
77
semver.c
|
@ -13,46 +13,46 @@ u128 u128FromVersion(Version *self) {
|
|||
|
||||
switch (self->vk_tag) {
|
||||
case Simple:
|
||||
out |= ((u128)self->vk_data.simple.major << (64 + 52));
|
||||
out |= ((u128)self->simple.major << (64 + 52));
|
||||
break;
|
||||
case Rapid:
|
||||
major = (uint64_t)self->vk_data.rapid.major << 52;
|
||||
minor = (uint64_t)self->vk_data.rapid.minor << 40;
|
||||
major = (uint64_t)self->rapid.major << 52;
|
||||
minor = (uint64_t)self->rapid.minor << 40;
|
||||
out = (u128)(major | minor) << 64;
|
||||
break;
|
||||
case SemVer:
|
||||
major = (uint64_t)self->vk_data.semver.major << 52;
|
||||
minor = (uint64_t)self->vk_data.semver.minor << 40;
|
||||
patch = (uint64_t)self->vk_data.semver.patch << 28;
|
||||
major = (uint64_t)self->semver.major << 52;
|
||||
minor = (uint64_t)self->semver.minor << 40;
|
||||
patch = (uint64_t)self->semver.patch << 28;
|
||||
out = (u128)(major | minor | patch) << 64;
|
||||
break;
|
||||
case Extended:
|
||||
major = (uint64_t)self->vk_data.extended.major << 52;
|
||||
minor = (uint64_t)self->vk_data.extended.minor << 40;
|
||||
patch = (uint64_t)self->vk_data.extended.patch << 28;
|
||||
build = (uint64_t)self->vk_data.extended.build << 16;
|
||||
major = (uint64_t)self->extended.major << 52;
|
||||
minor = (uint64_t)self->extended.minor << 40;
|
||||
patch = (uint64_t)self->extended.patch << 28;
|
||||
build = (uint64_t)self->extended.build << 16;
|
||||
out = (u128)(major | minor | patch | build) << 64;
|
||||
break;
|
||||
}
|
||||
switch (self->pr_tag) {
|
||||
switch (self->pr.tag) {
|
||||
case Alpha:
|
||||
out |= ((u128)010000 << 64);
|
||||
pre = self->pr_data.alpha & mask;
|
||||
pre = self->pr.alpha & mask;
|
||||
out |= ((u128)pre << 64);
|
||||
break;
|
||||
case Beta:
|
||||
out |= ((u128)020000 << 64);
|
||||
pre = self->pr_data.beta & mask;
|
||||
pre = self->pr.beta & mask;
|
||||
out |= ((u128)pre << 64);
|
||||
break;
|
||||
case ReleaseCandidate:
|
||||
out |= ((u128)040000 << 64);
|
||||
pre = self->pr_data.rc & mask;
|
||||
pre = self->pr.rc & mask;
|
||||
out |= ((u128)pre << 64);
|
||||
break;
|
||||
case GitRev:
|
||||
out |= ((u128)01000 << 64);
|
||||
ts = dateTimeGetTimestamp(&self->pr_data.git->dt);
|
||||
ts = dateTimeGetTimestamp(&self->pr.git.dt);
|
||||
out |= (u128)ts;
|
||||
break;
|
||||
case PRNone:
|
||||
|
@ -106,6 +106,11 @@ int parseArch(char *s) {
|
|||
return -1;
|
||||
}
|
||||
|
||||
int parsePreRelease(PreRelease *pr, const char *s) {
|
||||
// todo
|
||||
return -1;
|
||||
}
|
||||
|
||||
int parseVersion(Version *self, const char *s) {
|
||||
// todo
|
||||
return -1;
|
||||
|
@ -123,53 +128,53 @@ char *versionToString(Version *self) {
|
|||
}
|
||||
switch (self->vk_tag) {
|
||||
case Simple:
|
||||
snprintf(buf, 6, "%d", self->vk_data.simple.major);
|
||||
snprintf(buf, 6, "%d", self->simple.major);
|
||||
break;
|
||||
case Rapid:
|
||||
snprintf(buf, 13, "%d.%d", self->vk_data.rapid.major, self->vk_data.rapid.minor);
|
||||
snprintf(buf, 13, "%d.%d", self->rapid.major, self->rapid.minor);
|
||||
break;
|
||||
case SemVer:
|
||||
snprintf(
|
||||
buf, 20, "%d.%d.%d",
|
||||
self->vk_data.semver.major,
|
||||
self->vk_data.semver.minor,
|
||||
self->vk_data.semver.patch
|
||||
self->semver.major,
|
||||
self->semver.minor,
|
||||
self->semver.patch
|
||||
);
|
||||
break;
|
||||
case Extended:
|
||||
snprintf(
|
||||
buf, 27, "%d.%d.%d.%d",
|
||||
self->vk_data.extended.major,
|
||||
self->vk_data.extended.minor,
|
||||
self->vk_data.extended.patch,
|
||||
self->vk_data.extended.build
|
||||
self->extended.major,
|
||||
self->extended.minor,
|
||||
self->extended.patch,
|
||||
self->extended.build
|
||||
);
|
||||
break;
|
||||
}
|
||||
switch (self->pr_tag) {
|
||||
switch (self->pr.tag) {
|
||||
case PRNone:
|
||||
snprintf(temp, 9, "-%s", archToString(self->arch));
|
||||
break;
|
||||
case Alpha:
|
||||
snprintf(temp, 25, "_alpha%d-%s", self->pr_data.alpha, archToString(self->arch));
|
||||
snprintf(temp, 25, "_alpha%d-%s", self->pr.alpha, archToString(self->arch));
|
||||
break;
|
||||
case Beta:
|
||||
snprintf(temp, 25, "_beta%d-%s", self->pr_data.beta, archToString(self->arch));
|
||||
snprintf(temp, 25, "_beta%d-%s", self->pr.beta, archToString(self->arch));
|
||||
break;
|
||||
case ReleaseCandidate:
|
||||
snprintf(temp, 25, "_rc%d-%s", self->pr_data.rc, archToString(self->arch));
|
||||
snprintf(temp, 25, "_rc%d-%s", self->pr.rc, archToString(self->arch));
|
||||
break;
|
||||
case GitRev:
|
||||
snprintf(
|
||||
temp, 50, "_git_%c%c%c%c%c%c%c.%li-%s",
|
||||
self->pr_data.git->hash[0],
|
||||
self->pr_data.git->hash[1],
|
||||
self->pr_data.git->hash[2],
|
||||
self->pr_data.git->hash[3],
|
||||
self->pr_data.git->hash[4],
|
||||
self->pr_data.git->hash[5],
|
||||
self->pr_data.git->hash[6],
|
||||
dateTimeGetTimestamp(&self->pr_data.git->dt),
|
||||
self->pr.git.hash[0],
|
||||
self->pr.git.hash[1],
|
||||
self->pr.git.hash[2],
|
||||
self->pr.git.hash[3],
|
||||
self->pr.git.hash[4],
|
||||
self->pr.git.hash[5],
|
||||
self->pr.git.hash[6],
|
||||
dateTimeGetTimestamp(&self->pr.git.dt),
|
||||
archToString(self->arch)
|
||||
);
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue