So as part of my effort to get D running on GPUs I need to make a
"second class" pointer type that I can alter in the backend of
LDC to the correct address space. to that end I have made the
following
module dcompute.types.pointer;
enum Private = 0;
enum Global = 1;
enum Shared = 2;
enum Constant = 3;
enum Generic = 4;
pure @trusted nothrow @nogc
struct Pointer(uint p, T) if(p <= Generic)
{
T* ptr;
ref T opUnary(string op)() if(op=="*")
{
return *ptr;
}
ref T opIndex(size_t i)
{
return *(ptr+i);
}
auto opBinary(string op)(ptrdiff_t i) if(op=="+" || op == "-")
{
return Pointer!(p, T) (ptr + i);
}
}
is there anything else that I'm missing that you can do with a
raw pointer?