From e20c8bbcbd299700ccffdfe1d96f5a9c730435b8 Mon Sep 17 00:00:00 2001 From: Mathew Sutcliffe Date: Sat, 2 Jul 2016 01:40:00 +0100 Subject: [PATCH] Doxygen style. --- src/blackmisc/collection.h | 268 +++++++-------------- src/blackmisc/containerbase.h | 22 +- src/blackmisc/dictionary.h | 78 +++--- src/blackmisc/predicates.h | 4 +- src/blackmisc/range.h | 52 ++-- src/blackmisc/sequence.h | 440 +++++++++++----------------------- 6 files changed, 292 insertions(+), 572 deletions(-) diff --git a/src/blackmisc/collection.h b/src/blackmisc/collection.h index a6cf05678..c30dcc01f 100644 --- a/src/blackmisc/collection.h +++ b/src/blackmisc/collection.h @@ -51,7 +51,7 @@ namespace BlackMisc }; /*! - * \brief Generic type-erased ordered container with value semantics. + * Generic type-erased ordered container with value semantics. * \tparam T the type of elements contained. * * Can take any suitable container class as its implementation at runtime. @@ -62,7 +62,7 @@ namespace BlackMisc public Mixin::Icon> { public: - //! \brief STL compatibility + //! STL compatibility //! @{ typedef T key_type; typedef T value_type; @@ -76,201 +76,133 @@ namespace BlackMisc typedef intptr_t size_type; //! @} - /*! - * \brief Default constructor. - */ + //! Default constructor. CCollection() : m_pimpl(new Pimpl>(QOrderedSet())) {} - /*! - * \brief Initializer list constructor. - */ + //! Initializer list constructor. CCollection(std::initializer_list il) : m_pimpl(new Pimpl>(QOrderedSet(il))) {} - /*! - * \brief Copy constructor. - */ + //! Copy constructor. CCollection(const CCollection &other) : m_pimpl(other.pimpl() ? other.pimpl()->clone() : nullptr) {} - /*! - * \brief Constructor from QList. - */ + //! Constructor from QList. CCollection(const QList &list) : m_pimpl(new Pimpl>(QOrderedSet(list))) {} - /*! - * \brief Move constructor. - */ + //! Move constructor. CCollection(CCollection &&other) noexcept(std::is_nothrow_move_constructible::value) : m_pimpl(other.m_pimpl.take()) {} - /*! - * \brief Copy assignment. - */ + //! Copy assignment. CCollection &operator =(const CCollection &other) { m_pimpl.reset(other.pimpl() ? other.pimpl()->clone() : nullptr); return *this; } - /*! - * \brief Move assignment. - */ + //! Move assignment. CCollection &operator =(CCollection && other) noexcept(std::is_nothrow_move_assignable::value) { m_pimpl.reset(other.m_pimpl.take()); return *this; } - /*! - * \brief Create a new collection with a specific implementation type. - * \tparam C Becomes the collection's implementation type. - * \param c Initial value for the collection; default is empty, but it could contain elements if desired. The value is copied. - */ + //! Create a new collection with a specific implementation type. + //! \tparam C Becomes the collection's implementation type. + //! \param c Initial value for the collection; default is empty, but it could contain elements if desired. The value is copied. template static CCollection fromImpl(C c = C()) { return CCollection(new Pimpl(std::move(c))); } - /*! - * \brief Change the implementation type but keep all the same elements, by moving them into the new implementation. - * \tparam C Becomes the collection's new implementation type. - */ + //! Change the implementation type but keep all the same elements, by moving them into the new implementation. + //! \tparam C Becomes the collection's new implementation type. template void changeImpl(C = C()) { auto c = fromImpl(C()); std::move(begin(), end(), std::inserter(c, c.begin())); *this = std::move(c); } - /*! - * \brief Like changeImpl, but uses the implementation type of another collection. - * \pre The other collection must be initialized. - */ + //! Like changeImpl, but uses the implementation type of another collection. + //! \pre The other collection must be initialized. void useImplOf(const CCollection &other) { CCollection c(other.pimpl()->cloneEmpty()); std::move(begin(), end(), std::inserter(c, c.begin())); *this = std::move(c); } - /*! - * \brief Returns iterator at the beginning of the collection. - */ + //! Returns iterator at the beginning of the collection. iterator begin() { return pimpl() ? pimpl()->begin() : iterator(); } - /*! - * \brief Returns iterator at the beginning of the collection. - */ + //! Returns iterator at the beginning of the collection. const_iterator begin() const { return pimpl() ? pimpl()->begin() : const_iterator(); } - /*! - * \brief Returns iterator at the beginning of the collection. - */ + //! Returns iterator at the beginning of the collection. const_iterator cbegin() const { return pimpl() ? pimpl()->cbegin() : const_iterator(); } - /*! - * \brief Returns iterator one past the end of the collection. - */ + //! Returns iterator one past the end of the collection. iterator end() { return pimpl() ? pimpl()->end() : iterator(); } - /*! - * \brief Returns const iterator one past the end of the collection. - */ + //! Returns const iterator one past the end of the collection. const_iterator end() const { return pimpl() ? pimpl()->end() : const_iterator(); } - /*! - * \brief Returns const iterator one past the end of the collection. - */ + //! Returns const iterator one past the end of the collection. const_iterator cend() const { return pimpl() ? pimpl()->cend() : const_iterator(); } - /*! - * \brief Swap this collection with another. - */ + //! Swap this collection with another. void swap(CCollection &other) noexcept { m_pimpl.swap(other.m_pimpl); } - /*! - * \brief Returns number of elements in the collection. - */ + //! Returns number of elements in the collection. size_type size() const { return pimpl() ? pimpl()->size() : 0; } - /*! - * \brief Returns true if the collection is empty. - */ + //! Returns true if the collection is empty. bool empty() const { return pimpl() ? pimpl()->empty() : true; } - /*! - * \brief Synonym for empty. - */ + //! Synonym for empty. bool isEmpty() const { return empty(); } - /*! - * \brief Removes all elements in the collection. - */ + //! Removes all elements in the collection. void clear() { if (pimpl()) pimpl()->clear(); } - /*! - * \brief For compatibility with std::inserter. - * \param hint Ignored. - * \param value The value to insert. - * \pre The collection must be initialized. - */ + //! For compatibility with std::inserter. + //! \param hint Ignored. + //! \param value The value to insert. + //! \pre The collection must be initialized. iterator insert(const_iterator hint, const T &value) { Q_UNUSED(hint); return insert(value); } - /*! - * \brief For compatibility with std::inserter. - * \param hint Ignored. - * \param value The value to move in. - * \pre The collection must be initialized. - */ + //! For compatibility with std::inserter. + //! \param hint Ignored. + //! \param value The value to move in. + //! \pre The collection must be initialized. iterator insert(const_iterator hint, T &&value) { Q_UNUSED(hint); return insert(std::move(value)); } - /*! - * \brief Inserts an element into the collection. - * \return An iterator to the position where value was inserted. - * \pre The collection must be initialized. - */ + //! Inserts an element into the collection. + //! \return An iterator to the position where value was inserted. + //! \pre The collection must be initialized. iterator insert(const T &value) { Q_ASSERT(pimpl()); return pimpl()->insert(value); } - /*! - * \brief Moves an element into the collection. - * \return An iterator to the position where value was inserted. - * \pre The collection must be initialized. - */ + //! Moves an element into the collection. + //! \return An iterator to the position where value was inserted. + //! \pre The collection must be initialized. iterator insert(T &&value) { Q_ASSERT(pimpl()); return pimpl()->insert(std::move(value)); } - /*! - * \brief Inserts all elements from another collection into this collection. - * \pre This collection must be initialized. - */ + //! Inserts all elements from another collection into this collection. + //! \pre This collection must be initialized. void insert(const CCollection &other) { std::copy(other.begin(), other.end(), std::inserter(*this, begin())); } - /*! - * \brief Inserts all elements from another collection into this collection. - * This version moves elements instead of copying. - * \pre This collection must be initialized. - */ + //! Inserts all elements from another collection into this collection. + //! This version moves elements instead of copying. + //! \pre This collection must be initialized. void insert(CCollection &&other) { std::move(other.begin(), other.end(), std::inserter(*this, begin())); } - /*! - * \brief Appends all elements from a range at the end of this collection. - * \pre This collection must be initialized. - */ + //! Appends all elements from a range at the end of this collection. + //! \pre This collection must be initialized. template void insert(const CRange &range) { std::copy(range.begin(), range.end(), std::back_inserter(*this)); } - /*! - * \brief Synonym for insert. - * \return An iterator to the position where value was inserted. - * \pre The collection must be initialized. - */ + //! Synonym for insert. + //! \return An iterator to the position where value was inserted. + //! \pre The collection must be initialized. iterator push_back(const T &value) { return insert(value); } - /*! - * \brief Synonym for insert. - * \return An iterator to the position where value was inserted. - * \pre The collection must be initialized. - */ + //! Synonym for insert. + //! \return An iterator to the position where value was inserted. + //! \pre The collection must be initialized. iterator push_back(T &&value) { return insert(std::move(value)); } - /*! - * \brief Synonym for insert. - * \pre This collection must be initialized. - */ + //! Synonym for insert. + //! \pre This collection must be initialized. void push_back(const CCollection &other) { insert(other); } - /*! - * \brief Synonym for insert. - * \pre This collection must be initialized. - */ + //! Synonym for insert. + //! \pre This collection must be initialized. void push_back(CCollection &&other) { insert(std::move(other)); } - /*! - * \brief Synonym for insert. - * \pre This collection must be initialized. - */ + //! Synonym for insert. + //! \pre This collection must be initialized. template void push_back(const CRange &range) { std::copy(range.begin(), range.end(), std::back_inserter(*this)); } - /*! - * \brief Returns a collection which is the union of this collection and another container. - */ + //! Returns a collection which is the union of this collection and another container. template CCollection makeUnion(const C &other) const { @@ -279,9 +211,7 @@ namespace BlackMisc return result; } - /*! - * \brief Returns a collection which is the intersection of this collection and another. - */ + //! Returns a collection which is the intersection of this collection and another. template CCollection intersection(const C &other) const { @@ -290,9 +220,7 @@ namespace BlackMisc return result; } - /*! - * \brief Returns a collection which contains all the elements from this collection which are not in the other collection. - */ + //! Returns a collection which contains all the elements from this collection which are not in the other collection. template CCollection difference(const C &other) const { @@ -301,52 +229,38 @@ namespace BlackMisc return result; } - /*! - * \brief Remove the element pointed to by the given iterator. - * \return An iterator to the position of the next element after the one removed. - * \pre The collection must be initialized. - */ + //! Remove the element pointed to by the given iterator. + //! \return An iterator to the position of the next element after the one removed. + //! \pre The collection must be initialized. iterator erase(iterator pos) { Q_ASSERT(pimpl()); return pimpl()->erase(pos); } - /*! - * \brief Remove the range of elements between two iterators. - * \return An iterator to the position of the next element after the one removed. - * \pre The sequence must be initialized. - */ + //! Remove the range of elements between two iterators. + //! \return An iterator to the position of the next element after the one removed. + //! \pre The sequence must be initialized. iterator erase(iterator it1, iterator it2) { Q_ASSERT(pimpl()); return pimpl()->erase(it1, it2); } - /*! - * \brief Efficient find method using the find of the implementation container. Typically O(log n). - * \return An iterator to the position of the found element, or the end iterator if not found. - * \pre The sequence must be initialized. - * \warning Take care that the returned non-const iterator is not compared with a const iterator. - */ + //! Efficient find method using the find of the implementation container. Typically O(log n). + //! \return An iterator to the position of the found element, or the end iterator if not found. + //! \pre The sequence must be initialized. + //! \warning Take care that the returned non-const iterator is not compared with a const iterator. iterator find(const T &value) { Q_ASSERT(pimpl()); return pimpl()->find(value); } - /*! - * \brief Efficient find method using the find of the implementation container. Typically O(log n). - * \return An iterator to the position of the found element, or the end iterator if not found. - * \pre The sequence must be initialized. - */ + //! Efficient find method using the find of the implementation container. Typically O(log n). + //! \return An iterator to the position of the found element, or the end iterator if not found. + //! \pre The sequence must be initialized. const_iterator find(const T &value) const { Q_ASSERT(pimpl()); return pimpl()->find(value); } - /*! - * \brief Efficient remove using the find and erase of the implementation container. Typically O(log n). - * \pre The sequence must be initialized. - */ + //! Efficient remove using the find and erase of the implementation container. Typically O(log n). + //! \pre The sequence must be initialized. void remove(const T &object) { auto it = find(object); if (it != end()) { erase(it); } } - /*! - * \brief Removes from this collection all of the elements of another collection. - * \pre This sequence must be initialized. - */ + //! Removes from this collection all of the elements of another collection. + //! \pre This sequence must be initialized. void remove(const CCollection &other) { *this = CCollection(*this).difference(other); } - /*! - * \brief Remove elements for which a given predicate returns true. - * \pre The collection must be initialized. - * \return The number of elements removed. - */ + //! Remove elements for which a given predicate returns true. + //! \pre The collection must be initialized. + //! \return The number of elements removed. template int removeIf(Predicate p) { @@ -367,21 +281,15 @@ namespace BlackMisc return CCollection::CContainerBase::removeIf(k0, v0, keysValues...); } - /*! - * \brief Test for equality. - */ + //! Test for equality. bool operator ==(const CCollection &other) const { return *pimpl() == *other.pimpl(); } - /*! - * \brief Test for inequality. - */ + //! Test for inequality. bool operator !=(const CCollection &other) const { return !(*this == other); } - /*! - * \brief Return an opaque pointer to the implementation container. - * \details Can be useful in unusual debugging situations. - * \warning Not for general use. - */ + //! Return an opaque pointer to the implementation container. + //! \details Can be useful in unusual debugging situations. + //! \warning Not for general use. void *getImpl() { return pimpl() ? pimpl()->impl() : nullptr; } private: diff --git a/src/blackmisc/containerbase.h b/src/blackmisc/containerbase.h index 0eb9b4310..916a3a2c6 100644 --- a/src/blackmisc/containerbase.h +++ b/src/blackmisc/containerbase.h @@ -47,7 +47,7 @@ namespace BlackMisc }; /*! - * \brief Base class for CCollection and CSequence adding mutating operations and CValueObject facility on top of CRangeBase. + * Base class for CCollection and CSequence adding mutating operations and CValueObject facility on top of CRangeBase. */ template