/* * \brief Utility for checking array bounds * \author Norman Feske * \date 2011-02-18 */ /* * Copyright (C) 2011-2017 Genode Labs GmbH * * This file is part of the Genode OS framework, which is distributed * under the terms of the GNU Affero General Public License version 3. */ #ifndef _NOUX__RANGE_CHECKED_INDEX_H_ #define _NOUX__RANGE_CHECKED_INDEX_H_ namespace Noux { class Index_out_of_range { }; template struct Range_checked_index; } template struct Noux::Range_checked_index { T value; T const max; Range_checked_index(T value, T max) : value(value), max(max) { } Range_checked_index operator++ (int) { T old_value = value; if (++value >= max) throw Index_out_of_range(); return Range_checked_index(old_value, max); } operator T () { return value; } }; #endif /* _NOUX__RANGE_CHECKED_INDEX_H_ */