blob: 01edc0d5e2bf7da0c0bd075b90368a4636c24764 [file] [log] [blame]
/*
TEST_OUTPUT:
---
fail_compilation/ice14929.d(45): Error: cast(Node)(*this.current).items[this.index] is not an lvalue
fail_compilation/ice14929.d(88): Error: template instance ice14929.HashMap!(ulong, int).HashMap.opBinaryRight!"in" error instantiating
fail_compilation/ice14929.d(92): instantiated from here: HashmapComponentStorage!int
fail_compilation/ice14929.d(92): Error: template instance ice14929.isComponentStorage!(HashmapComponentStorage!int, int) error instantiating
fail_compilation/ice14929.d(92): while evaluating: `static assert(isComponentStorage!(HashmapComponentStorage!int, int))`
---
*/
struct HashMap(K, V)
{
V* opBinaryRight(string op)(K key) const if (op == "in")
{
size_t index;
foreach (ref node; buckets[index].range)
{
return &(node.value);
}
return null;
}
struct Node
{
K key;
V value;
}
alias Bucket = UnrolledList!(Node);
Bucket[] buckets;
}
struct UnrolledList(T)
{
Range range() const pure
{
return Range(_front);
}
static struct Range
{
ref T front() const @property
{
return cast(T) current.items[index];
}
void popFront() pure
{
}
bool empty() const pure @property
{
return true;
}
const(Node)* current;
size_t index;
}
Node* _front;
static struct Node
{
ContainerStorageType!T[10] items;
}
}
template ContainerStorageType(T)
{
alias ContainerStorageType = T;
}
template isComponentStorage(CS, C)
{
enum bool isComponentStorage = is(typeof(
(inout int = 0)
{
CS cs = CS.init;
ulong eid;
cs.add(eid, c);
}));
}
struct HashmapComponentStorage(ComponentType)
{
private HashMap!(ulong, ComponentType) components;
void add(ulong eid, ComponentType component)
{
assert(eid !in components);
}
}
static assert(isComponentStorage!(HashmapComponentStorage!int, int));
void main()
{
}