summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorkr.angelov <kr.angelov@gmail.com>2013-09-26 10:41:52 +0000
committerkr.angelov <kr.angelov@gmail.com>2013-09-26 10:41:52 +0000
commit216490f27592d1f1c0dd74846c12b986a08e27bc (patch)
treeafac32e97887f88feae5f3c5da9ab440bebc203b
parent2e2f74741ab494c4fa0898f6dcbbed86f790e710 (diff)
add gu_variant_close in libgu
-rw-r--r--src/runtime/c/gu/variant.c14
-rw-r--r--src/runtime/c/gu/variant.h1
2 files changed, 15 insertions, 0 deletions
diff --git a/src/runtime/c/gu/variant.c b/src/runtime/c/gu/variant.c
index 62fdb92c1..0a72eccdb 100644
--- a/src/runtime/c/gu/variant.c
+++ b/src/runtime/c/gu/variant.c
@@ -83,6 +83,20 @@ GuVariantInfo gu_variant_open(GuVariant variant)
return info;
}
+GuVariant gu_variant_close(GuVariantInfo info)
+{
+ GuVariant variant;
+
+ if (((size_t)info.tag) > GU_VARIANT_ALIGNMENT - 2) {
+ variant.p = (uintptr_t)info.data;
+ assert(gu_variant_tag(variant) == info.tag);
+ } else {
+ variant.p = ((uintptr_t)info.data) | (info.tag + 1);
+ }
+
+ return variant;
+}
+
int
gu_variant_intval(GuVariant variant)
{
diff --git a/src/runtime/c/gu/variant.h b/src/runtime/c/gu/variant.h
index ab1265ff1..91665279d 100644
--- a/src/runtime/c/gu/variant.h
+++ b/src/runtime/c/gu/variant.h
@@ -82,6 +82,7 @@ struct GuVariantInfo {
};
GuVariantInfo gu_variant_open(GuVariant variant);
+GuVariant gu_variant_close(GuVariantInfo info);
/** @privatesection */
struct GuVariant {