add cache.c and cache.h