#ifndef RANKS_H__ #define RANKS_H__ /*************************************************************************************** * @file Ranks.h * * @brief Defines constants and functions for working with ranks. * @copyright * Copyright 2023 Tom Hicks * Licensed under the MIT license see the LICENSE file for details. ***************************************************************************************/ #include #include /** \addtogroup * @{ */ namespace SBF { const int kRankPrimaryId = 1; const int kRankSecondaryId = 2; const int kRankTertiaryId = 3; struct RankType { int id; std::string label; }; /// @brief Writes a rank to an ostream. /// @param os The ostream to write to. /// @param rank The rank to write. /// @return The provided ostream for chaining. std::ostream& operator<<(std::ostream& os, const RankType& rank); /// @brief Determines if two ranks are equal. /// @param left A rank to compare. /// @param right A rank to compare. /// @return True if both ranks are equal and false otherwise. bool operator==(const RankType& left, const RankType& right); /// @brief Determines if two ranks are unequal. /// @param left A rank to compare. /// @param right A rank to compare. /// @return True if both ranks are unequal and false otherwise. bool operator!=(const RankType& left, const RankType& right); /// @brief Gets a rank with a specific id. /// @param rank_id The id of the rank to get. /// @return The rank with id == rank_id or the unknown rank kRankUnknown if rank_id is invalid. RankType GetRank(int rank_id); /// @brief Fills the provided vector with all valid rank labels. /// @param ranks The vector to fill. It will be cleared first. void FillRanks(std::vector& ranks); } // End namespace SBF /** @}*/ #endif // !defined RANKS_H__