add functor.h