#ifndef BOUNDED_H_INCLUDED_
#define BOUNDED_H_INCLUDED_
template < class T, T lower, T upper>
class bounded {
T val;
T check( T v) {
if ( upper < v)
return upper;
else if ( lower <= v)
return v;
else
return lower;
}
public :
bounded( bounded const & o) : val( o.val ) { }
bounded & operator= ( T v) {
val = check( v) ;
return * this ;
}
bounded( T const & v= T( ) ) {
val = check( v) ;
}
operator T( ) { return val; }
} ;
#endif
I2lmbmRlZiBCT1VOREVEX0hfSU5DTFVERURfCiNkZWZpbmUgQk9VTkRFRF9IX0lOQ0xVREVEXwoKdGVtcGxhdGUgPGNsYXNzIFQsIFQgbG93ZXIsIFQgdXBwZXI+CmNsYXNzIGJvdW5kZWQgeyAKICAgIFQgdmFsOwoKICAgIFQgY2hlY2soVCB2KSB7CgkJaWYgKHVwcGVyIDwgdikKCQkJcmV0dXJuIHVwcGVyOwoJCWVsc2UgaWYgKGxvd2VyIDw9IHYpCgkJCXJldHVybiB2OwoJCWVsc2UKCQkJcmV0dXJuIGxvd2VyOwoJfQoKcHVibGljOgogICAgYm91bmRlZChib3VuZGVkIGNvbnN0ICZvKSA6IHZhbChvLnZhbCkge30KCiAgICBib3VuZGVkICZvcGVyYXRvcj0oVCB2KSB7IAoJCXZhbCA9IGNoZWNrKHYpOwogICAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCglib3VuZGVkKFQgY29uc3QgJnY9VCgpKSB7CgkJdmFsID0gY2hlY2sodik7Cgl9CgogICAgb3BlcmF0b3IgVCgpIHsgcmV0dXJuIHZhbDsgfQp9OwoKI2VuZGlmCg==