write once type?
H. S. Teoh
hsteoh at quickfur.ath.cx
Tue Apr 20 20:15:02 UTC 2021
On Tue, Apr 20, 2021 at 03:56:33PM -0400, Steven Schveighoffer via Digitalmars-d-learn wrote:
[...]
> I'm wondering if anyone has a "Write once" type, that is, a type that
> allows you to write it exactly once, and is treated like
> initialization on first setting (i.e. allows writing to previously
> unused const data).
Maybe a const class? The reference is null until you initialize it by
allocating a new object and initializing it in the ctor.
But sounds like you want a value type instead. Technically, allocating a
const class involves the GC assigning some region of memory to the
class, initializing it, then casting it to const. So I'd imagine that
the by-value equivalent would require a const cast somewhere, probably
in a @trusted block if you want it to work with @safe.
Which means that probably you'll need a @trusted cast somewhere in your
implementation. So perhaps something like this:
struct WriteOnce(T) {
const T payload;
const bool isSet;
void opAssign(U : T)(U data)
in (!isSet)
{
assert(!isSet);
@trusted() {
*(cast()&payload) = data;
*(cast()&isSet) = true;
}();
}
}
T
--
Prosperity breeds contempt, and poverty breeds consent. -- Suck.com
More information about the Digitalmars-d-learn
mailing list