This might already exist but I thought that it was cool that it
was possible in D non the less. Just thought I would share :)

struct namedGlobalArray(string name, T)
{
        import std.typecons;
        T opDispatch(string var)(T x)
        {
                Nullable!T tmp = x;
                return accessStorage!var(tmp);
        }
        
        T opDispatch(string var)()
        {
                Nullable!T tmp;
                return accessStorage!var(tmp);
        }
        
        public T accessStorage(string var)(Nullable!T x)
        {
                static T data;
                if(!x.isNull) data = x;
                return data;
        }
}

Example usage...

Module A:
void main(string[] args)
{
        import moduleB;
        namedGlobalArray!("GlobArray",int) glob;
        namedGlobalArray!("GlobArray2",int) glob2;
        glob.a = 10;
        glob.b = 20;
        glob2.a = 77;
        assert(glob.a == 10);
        assert(glob.b == 20);
        assert(glob.c == 0);
        assert(glob2.a == 77);
        testGlob();
        assert(glob.a == 314);
        assert(glob.b == 20);
        assert(glob.c == 9);
        assert(glob2.a == 77);
}

Module B:
public void testGlob()
{
        namedGlobalArray!("GlobArray",int) glob;
        glob.a = 314;
        glob.c = 9;
}

There might be a way to do it without Nullable but I couldn't
think of one...

Reply via email to