Add some missing functions to CCMap

This commit is contained in:
Paul Fd 2020-04-18 16:16:00 +02:00 committed by Jean Pierre Cimalando
parent acba0ba40b
commit 114cd22f76

View file

@ -22,7 +22,10 @@ namespace sfz {
template <class ValueType> template <class ValueType>
class CCMap { class CCMap {
public: public:
CCMap() = delete; CCMap()
: defaultValue(ValueType {})
{
}
/** /**
* @brief Construct a new CCMap object with the specified default value. * @brief Construct a new CCMap object with the specified default value.
* *
@ -44,7 +47,7 @@ public:
*/ */
const ValueType& getWithDefault(int index) const noexcept const ValueType& getWithDefault(int index) const noexcept
{ {
auto it = absl::c_lower_bound(container, index, CCDataComparator<ValueType>{}); auto it = absl::c_lower_bound(container, index, CCDataComparator<ValueType> {});
if (it == container.end() || it->cc != index) { if (it == container.end() || it->cc != index) {
return defaultValue; return defaultValue;
} else { } else {
@ -60,7 +63,7 @@ public:
*/ */
ValueType& operator[](const int& index) noexcept ValueType& operator[](const int& index) noexcept
{ {
auto it = absl::c_lower_bound(container, index, CCDataComparator<ValueType>{}); auto it = absl::c_lower_bound(container, index, CCDataComparator<ValueType> {});
if (it == container.end() || it->cc != index) { if (it == container.end() || it->cc != index) {
auto inserted = container.insert(it, { index, defaultValue }); auto inserted = container.insert(it, { index, defaultValue });
return inserted->data; return inserted->data;
@ -85,10 +88,19 @@ public:
*/ */
bool contains(int index) const noexcept bool contains(int index) const noexcept
{ {
return absl::c_binary_search(container, index, CCDataComparator<ValueType>{}); return absl::c_binary_search(container, index, CCDataComparator<ValueType> {});
} }
/**
* @brief Container size
*
* @return size_t
*/
size_t size() const noexcept { return container.size(); }
typename std::vector<CCData<ValueType>>::const_iterator begin() const { return container.cbegin(); } typename std::vector<CCData<ValueType>>::const_iterator begin() const { return container.cbegin(); }
typename std::vector<CCData<ValueType>>::const_iterator end() const { return container.cend(); } typename std::vector<CCData<ValueType>>::const_iterator end() const { return container.cend(); }
private: private:
// typename std::vector<std::pair<int, ValueType>>::iterator begin() { return container.begin(); } // typename std::vector<std::pair<int, ValueType>>::iterator begin() { return container.begin(); }
// typename std::vector<std::pair<int, ValueType>>::iterator end() { return container.end(); } // typename std::vector<std::pair<int, ValueType>>::iterator end() { return container.end(); }