Clone in a terminal:
UniRange.vala
/*
    Copyright (C) 2012 Johan Mattsson

    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.

    You should have received a copy of the GNU General Public License
    along with this program.  If not, see <http://www.gnu.org/licenses/>.
*/

namespace Supplement {
	
public class UniRange : GLib.Object {
	
	public unichar start;
	public unichar stop;
	
	public UniRange (unichar start, unichar stop) {
		this.start = start;
		this.stop = stop;
	}
	
	public unichar length () {
		return stop - start + 1;
	}

	public unichar get_char (unichar index) {
		unichar result = start + index;
		
		if (unlikely (index < 0)) {
			warning ("Index is negative in UniRange.");
		}
		
		if (unlikely (!(start <= result <= stop))) {
			warning ("Index out of range in UniRange (%u <= %u <= %u) (index: %u)\n", start, result, stop, index);
		}
		
		return result;
	}
}

}

Contact

Email: johan.mattsson.m@gmail.com
Mastodon: typo.social/@birdfont
GitHub: johanmattssonm
LinkedIn: johan-mattsson-2ab324112