/***************************************************************** * Functions to help treat arrays in a uniform manner. These were * inspired by a thread on comp.lang.c++.moderated, started by Dietmar * Kuehl and contributed to by the rest of the entire planet. * * beginof (x), endof (x), lengthof (x) now accompany sizeof, where x * can be either a container (currently only sequences) or a builtin * array (/not/ a pointer). The beginof/endof are intended for use in * the algorithms library, and lengthof is a "sizing" function. * * Note example: * char an_array [17]; * cerr << lengthof(an_array) << endl; * produces assembly code of * mov 17,register0 * call ofstream_put * i.e., the template function inlining really does work; g++ * requires -O3 (or -finline-functions) before it does this, though. * * pedwards 13Nov98 */ // beginof template inline typename vector::iterator beginof (vector &v) { return v.begin(); } template inline T* beginof (T (&array)[sz]) { return array; } // endof template inline typename vector::iterator endof (vector &v) { return v.end(); } template inline T* endof (T (&array)[sz]) { return array + sz; } // lengthof template inline typename vector::size_type lengthof (vector &v) { return v.size(); } template inline unsigned int lengthof (T (&)[sz]) { return sz; }