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