module image.CachedLoader; private { import image.Image; import image.Loader; } class CachedLoader : Loader { this (Loader cached) { assert (cached !is null); this.cached = cached; } Image load(char[] filename) { { Image* c = filename in cache; if (c !is null) { assert (*c !is null); return *c; } } Image im = cached.load(filename); if (im !is null) { cache[filename] = im; } return im; } protected { Loader cached; Image[char[]] cache; } }