add functor __call__