historical/toontown-classic.git/panda/include/buttonHandle.I
2024-01-16 11:20:27 -06:00

146 lines
3.3 KiB
Text

/**
* PANDA 3D SOFTWARE
* Copyright (c) Carnegie Mellon University. All rights reserved.
*
* All use of this software is subject to the terms of the revised BSD
* license. You should have received a copy of this license along
* with this source code in a file named "LICENSE."
*
* @file buttonHandle.I
* @author drose
* @date 2000-03-01
*/
/**
* Constructs a ButtonHandle with the corresponding index number, which may
* have been returned by an earlier call to ButtonHandle::get_index().
*/
constexpr ButtonHandle::
ButtonHandle(int index) : _index(index) {
}
/**
*
*/
INLINE bool ButtonHandle::
operator == (const ButtonHandle &other) const {
return (_index == other._index);
}
/**
*
*/
INLINE bool ButtonHandle::
operator != (const ButtonHandle &other) const {
return (_index != other._index);
}
/**
*
*/
INLINE bool ButtonHandle::
operator < (const ButtonHandle &other) const {
return (_index < other._index);
}
/**
*
*/
INLINE bool ButtonHandle::
operator <= (const ButtonHandle &other) const {
return (_index <= other._index);
}
/**
*
*/
INLINE bool ButtonHandle::
operator > (const ButtonHandle &other) const {
return (_index > other._index);
}
/**
*
*/
INLINE bool ButtonHandle::
operator >= (const ButtonHandle &other) const {
return (_index >= other._index);
}
/**
* Sorts ButtonHandles arbitrarily (according to <, >, etc.). Returns a
* number less than 0 if this type sorts before the other one, greater than
* zero if it sorts after, 0 if they are equivalent.
*/
INLINE int ButtonHandle::
compare_to(const ButtonHandle &other) const {
return _index - other._index;
}
/**
* Returns a hash code suitable for phash_map.
*/
INLINE size_t ButtonHandle::
get_hash() const {
return (size_t)_index;
}
/**
* Returns true if the button was created with an ASCII equivalent code (e.g.
* for a standard keyboard button).
*/
INLINE bool ButtonHandle::
has_ascii_equivalent() const {
return (_index > 0 && _index < 128);
}
/**
* Returns the character code associated with the button, or '\0' if no ASCII
* code was associated.
*/
INLINE char ButtonHandle::
get_ascii_equivalent() const {
return has_ascii_equivalent() ? (char)_index : '\0';
}
/**
* Returns true if this ButtonHandle is the same as the other one, or if the
* other one is an alias for this one. (Does not return true if this button
* is an alias for the other one, however.)
*
* This is a more general comparison than operator ==.
*/
INLINE bool ButtonHandle::
matches(const ButtonHandle &other) const {
return ((*this) == other ||
(other != ButtonHandle::none() &&
get_alias() == other));
}
/**
* Returns the integer index associated with this ButtonHandle. Each
* different ButtonHandle will have a different index. However, you probably
* shouldn't be using this method; you should just treat the ButtonHandles as
* opaque classes. This is provided for the convenience of non-C++ scripting
* languages to build a hashtable of ButtonHandles.
*/
constexpr int ButtonHandle::
get_index() const {
return _index;
}
/**
*
*/
INLINE void ButtonHandle::
output(std::ostream &out) const {
out << get_name();
}
/**
* ButtonHandle::none() evaluates to false, everything else evaluates to true.
*/
INLINE ButtonHandle::
operator bool () const {
return (_index != 0);
}