/** * Definition of the symbol id * $Id$ * $HeadURL$ * $Author$ */ #pragma once namespace SymbologyXML { struct symbol_id_t { /** * @brief Constructor * @param raw value of the symbol id (real symbol id AND flag 'isArtillery') */ explicit symbol_id_t(unsigned short raw = 0) : m_raw(raw) {} /** * @brief Get the real symbol id * @return real symbol id */ unsigned short symbolId() const { return (m_raw & idMask); } /** * @brief Set the real symbol id * @param real symbol id */ void setSymbolId(unsigned short id) { m_raw = ((id & idMask) | (m_raw & bit) );} /** * @brief Get flag 'isArtillery' * @return 'isArtillery' */ bool isArtillery() const { return ((m_raw & bit) == bit); } /** * @brief Set flag 'isArtillery' * @param flag 'isArtillery' */ void setArtillery(bool bSet) { if(bSet) m_raw |= bit; else m_raw &= ~bit; } /** * @brief Get the raw data (e.g. for database insertion) * @return */ unsigned short raw() const { return m_raw; } unsigned short &raw() { return m_raw; } /** * @brief Set raw value of the symbol id (real symbol id AND flag 'isArtillery') * @param raw value */ void setRaw(unsigned short raw) { m_raw = raw; } bool operator==(const symbol_id_t other) const { return m_raw == other.m_raw; } bool operator!=(const symbol_id_t other) const { return !operator==(other); } protected: // For isArtillery: static const unsigned short idMask = 0x7fffU; static const unsigned short bit = 0x8000U; // raw data: unsigned short m_raw; }; }; // namespace SymbologyXML