diff --git a/src/sfizz/CCMap.h b/src/sfizz/CCMap.h index 6da0940f..5d8b6e7f 100644 --- a/src/sfizz/CCMap.h +++ b/src/sfizz/CCMap.h @@ -26,10 +26,23 @@ #include namespace sfz { +/** + * @brief A simple map that holds ValueType elements at different indices, and can return a default one + * if not present. Used mostly for CC modifiers in region descriptions as to store only the CC modifiers + * that are specified in the SFZ file rather than a gazillion of dummy "disabled" modifiers. The default + * value is set on construction. + * + * @tparam ValueType The type held in the map + */ template class CCMap { public: CCMap() = delete; + /** + * @brief Construct a new CCMap object with the specified default value. + * + * @param defaultValue + */ CCMap(const ValueType& defaultValue) : defaultValue(defaultValue) { @@ -38,6 +51,12 @@ public: CCMap(const CCMap&) = default; ~CCMap() = default; + /** + * @brief Returns the held object at the index, or a default value if not present + * + * @param index + * @return const ValueType& + */ const ValueType& getWithDefault(int index) const noexcept { auto it = container.find(index); @@ -48,6 +67,12 @@ public: } } + /** + * @brief Get the value at index key or emplace a new one if not present + * + * @param key the index of the element + * @return ValueType& + */ ValueType& operator[](const int& key) noexcept { if (!contains(key)) @@ -55,8 +80,27 @@ public: return container.operator[](key); } + /** + * @brief Is the container empty + * + * @return true + * @return false + */ inline bool empty() const { return container.empty(); } + /** + * @brief Returns the value at index with bounds checking (and possibly exceptions) + * + * @param index + * @return const ValueType& + */ const ValueType& at(int index) const { return container.at(index); } + /** + * @brief Returns true if the container containers an element at index + * + * @param index + * @return true + * @return false + */ bool contains(int index) const noexcept { return container.find(index) != container.end(); } typename std::map::iterator begin() { return container.begin(); } typename std::map::iterator end() { return container.end(); } @@ -65,4 +109,4 @@ private: std::map container; LEAK_DETECTOR(CCMap); }; -} \ No newline at end of file +}