taggedalgebraic 0.10.13
A "tagged union" implementation with transparent operator forwarding.
To use this package, run the following command in your project's root directory:
Manual usage
Put the following dependency into your project's dependences section:
TaggedAlgebraic
Implementation of a generic algebraic data type with a tagged union storage. All operations of the contained types are available for the TaggedAlgebraic
Usage
import taggedalgebraic;
struct Foo {
string name;
void bar() {}
}
union Base {
int i;
string str;
Foo foo;
}
alias Tagged = TaggedAlgebraic!Base;
// Instantiate
Tagged taggedInt = 5;
Tagged taggedString = "Hello";
Tagged taggedFoo = Foo();
Tagged taggedAny = taggedInt;
taggedAny = taggedString;
taggedAny = taggedFoo;
// Check type: Tagged.Kind is an enum
assert(taggedInt.kind == Tagged.Kind.i);
assert(taggedString.kind == Tagged.Kind.str);
assert(taggedFoo.kind == Tagged.Kind.foo);
assert(taggedAny.kind == Tagged.Kind.foo);
// In most cases, can simply use as-is
auto num = 4 + taggedInt;
auto msg = taggedString ~ " World!";
taggedFoo.bar();
if (taggedAny.kind == Tagged.Kind.foo) // Make sure to check type first!
taggedAny.bar();
//taggedString.bar(); // AssertError: Not a Foo!
// Convert back by casting
auto i = cast(int) taggedInt;
auto str = cast(string) taggedString;
auto foo = cast(Foo) taggedFoo;
if (taggedAny.kind == Tagged.Kind.foo) // Make sure to check type first!
auto foo2 = cast(Foo) taggedAny;
//cast(Foo) taggedString; // AssertError!
// Kind is an enum, so final switch is supported:
final switch (taggedAny.kind) {
case Tagged.Kind.i:
// It's "int i"
break;
case Tagged.Kind.str:
// It's "string str"
break;
case Tagged.Kind.foo:
// It's "Foo foo"
break;
}
- Registered by Sönke Ludwig
- 0.10.13 released 5 years ago
- s-ludwig/taggedalgebraic
- BSL-1.0
- Copyright © 2015, Sönke Ludiwg
- Authors:
- Dependencies:
- none
- Versions:
-
0.11.23 2024-Apr-18 0.11.22 2021-May-20 0.11.21 2021-Mar-31 0.11.20 2021-Mar-16 0.11.19 2021-Jan-13 - Download Stats:
-
-
296 downloads today
-
2066 downloads this week
-
10414 downloads this month
-
1911206 downloads total
-
- Score:
- 4.3
- Short URL:
- taggedalgebraic.dub.pm