diff --git a/fx/iterator.c b/fx/iterator.c index 149e772..d857971 100644 --- a/fx/iterator.c +++ b/fx/iterator.c @@ -25,6 +25,10 @@ static enum fx_status iterator_set_status( const fx_iterator *fx_iterator_begin(const fx_iterable *it) { + if (!it) { + return NULL; + } + FX_CLASS_DISPATCH_VIRTUAL_0( fx_iterable, FX_TYPE_ITERABLE, @@ -35,11 +39,19 @@ const fx_iterator *fx_iterator_begin(const fx_iterable *it) enum fx_status fx_iterator_get_status(const fx_iterator *it) { + if (!it) { + return FX_ERR_NO_DATA; + } + FX_CLASS_DISPATCH_STATIC_0(FX_TYPE_ITERATOR, iterator_get_status, it); } enum fx_status fx_iterator_set_status(const fx_iterator *it, fx_status status) { + if (!it) { + return FX_ERR_NO_DATA; + } + FX_CLASS_DISPATCH_STATIC( FX_TYPE_ITERATOR, iterator_set_status, @@ -49,11 +61,14 @@ enum fx_status fx_iterator_set_status(const fx_iterator *it, fx_status status) enum fx_status fx_iterator_move_next(const fx_iterator *it) { + if (!it) { + return FX_ERR_NO_DATA; + } + enum fx_status status = FX_ERR_NOT_SUPPORTED; - fx_iterator_class *iface = fx_object_get_interface( - it, - FX_TYPE_ITERATOR); + fx_iterator_class *iface + = fx_object_get_interface(it, FX_TYPE_ITERATOR); if (iface && iface->it_move_next) { status = iface->it_move_next(it); } @@ -66,6 +81,10 @@ enum fx_status fx_iterator_move_next(const fx_iterator *it) const fx_value *fx_iterator_get_value(const fx_iterator *it) { + if (!it) { + return NULL; + } + FX_CLASS_DISPATCH_VIRTUAL_0( fx_iterator, FX_TYPE_ITERATOR, @@ -76,11 +95,14 @@ const fx_value *fx_iterator_get_value(const fx_iterator *it) fx_status fx_iterator_erase(fx_iterator *it) { + if (!it) { + return FX_ERR_NO_DATA; + } + enum fx_status status = FX_ERR_NOT_SUPPORTED; - fx_iterator_class *iface = fx_object_get_interface( - it, - FX_TYPE_ITERATOR); + fx_iterator_class *iface + = fx_object_get_interface(it, FX_TYPE_ITERATOR); if (iface && iface->it_erase) { status = iface->it_erase(it); }