summaryrefslogtreecommitdiffstats
path: root/src/reflist.h
diff options
context:
space:
mode:
authorDimitri van Heesch <doxygen@gmail.com>2020-02-27 21:38:22 (GMT)
committerDimitri van Heesch <doxygen@gmail.com>2020-02-27 21:39:20 (GMT)
commitaca13723a9373a1080ca7f108e7be0905b9ae793 (patch)
tree311a47c8d4005a05a5b42dc4ebcf22718e650968 /src/reflist.h
parenta09f1a1e3e676a75669f7b85482aa9f95a947111 (diff)
downloadDoxygen-aca13723a9373a1080ca7f108e7be0905b9ae793.zip
Doxygen-aca13723a9373a1080ca7f108e7be0905b9ae793.tar.gz
Doxygen-aca13723a9373a1080ca7f108e7be0905b9ae793.tar.bz2
Restructure the way RefLists are handled
Diffstat (limited to 'src/reflist.h')
-rw-r--r--src/reflist.h134
1 files changed, 90 insertions, 44 deletions
diff --git a/src/reflist.h b/src/reflist.h
index d064c58..4030c8b 100644
--- a/src/reflist.h
+++ b/src/reflist.h
@@ -1,9 +1,6 @@
/******************************************************************************
*
- *
- *
- *
- * Copyright (C) 1997-2015 by Dimitri van Heesch.
+ * Copyright (C) 1997-2020 by Dimitri van Heesch.
*
* Permission to use, copy, modify, and distribute this software and its
* documentation under the terms of the GNU General Public License is hereby
@@ -21,37 +18,49 @@
#include <qintdict.h>
#include <qlist.h>
-#include "sortdict.h"
+#include "util.h"
+#include "linkedmap.h"
class Definition;
+class RefList;
/** This struct represents an item in the list of references. */
-struct RefItem
+class RefItem
{
- RefItem() : scope(0) {}
- QCString text; //!< text of the item.
- QCString listAnchor; //!< anchor in the list
+ public:
+ RefItem(int id,RefList *list) : m_id(id), m_list(list) {}
- QCString prefix; //!< type prefix for the name
- Definition *scope; //!< scope to use for references.
- QCString name; //!< name of the entity containing the reference
- QCString title; //!< display name of the entity
- QCString args; //!< optional arguments for the entity (if function)
- //bool written;
- QList<RefItem> extraItems; //!< more items belonging to the same entity
-};
+ void setText (const char *text) { m_text = text; }
+ void setAnchor(const char *anchor) { m_anchor = anchor; }
+ void setPrefix(const char *prefix) { m_prefix = prefix; }
+ void setName (const char *name) { m_name = name; }
+ void setTitle (const char *title) { m_title = title; }
+ void setArgs (const char *args) { m_args = args; }
+ void setGroup (const char *group) { m_group = group; }
+ void setScope (const Definition *scope) { m_scope = scope; }
+
+ QCString text() const { return m_text; }
+ QCString anchor() const { return m_anchor; }
+ QCString prefix() const { return m_prefix; }
+ QCString name() const { return m_name; }
+ QCString title() const { return m_title; }
+ QCString args() const { return m_args; }
+ QCString group() const { return m_group; }
+ int id() const { return m_id; }
+ RefList *list() const { return m_list; }
+ const Definition *scope() const { return m_scope; }
-/** List of items sorted by title */
-class SortedRefItems : public SDict<RefItem>
-{
- public:
- SortedRefItems(int size=17) : SDict<RefItem>(size) {}
- virtual ~SortedRefItems() {}
private:
- int compareValues(const RefItem *r1,const RefItem *r2) const
- {
- return qstricmp(r1->title,r2->title);
- }
+ int m_id = 0; //!< unique identifier for this item within its list
+ RefList *m_list; //!< list owning this item
+ QCString m_text; //!< text of the item.
+ QCString m_anchor; //!< anchor in the list
+ QCString m_prefix; //!< type prefix for the name
+ QCString m_name; //!< name of the entity containing the reference
+ QCString m_title; //!< display name of the entity
+ QCString m_args; //!< optional arguments for the entity (if function)
+ QCString m_group; //!< group id used to combine item under a single header
+ const Definition *m_scope = 0; //!< scope to use for references.
};
/** List of cross-referenced items
@@ -67,31 +76,68 @@ class SortedRefItems : public SDict<RefItem>
class RefList
{
public:
- int addRefItem();
- RefItem *getRefItem(int todoItemId);
- RefItem *getFirstRefItem();
- RefItem *getNextRefItem();
- QCString listName() const;
- QCString fileName() const;
- QCString pageTitle() const;
- QCString sectionTitle() const;
+ /*! Create a list of items that are cross referenced with documentation blocks
+ * @param listName String representing the name of the list.
+ * @param pageTitle String representing the title of the list page.
+ * @param secTitle String representing the title of the section.
+ */
+ RefList(const char *listName, const char *pageTitle, const char *secTitle) :
+ m_listName(listName), m_fileName(convertNameToFile(listName,FALSE,TRUE)),
+ m_pageTitle(pageTitle), m_secTitle(secTitle) {}
+
+ /*! Adds a new item to the list.
+ * @returns A unique id for this item.
+ */
+ RefItem *add()
+ {
+ m_id++;
+ std::unique_ptr<RefItem> item = std::make_unique<RefItem>(m_id,this);
+ RefItem *result = item.get();
+ m_entries.push_back(std::move(item));
+ m_lookup.insert({m_id,result});
+ return result;
+ }
+
+ /*! Returns an item given it's id that is obtained with addRefItem()
+ * @param itemId item's identifier.
+ * @returns A pointer to the todo item's structure.
+ */
+ RefItem *find(int itemId)
+ {
+ auto it = m_lookup.find(itemId);
+ return it!=m_lookup.end() ? it->second : nullptr;
+ }
+
+ QCString listName() const { return m_listName; }
+ QCString fileName() const { return m_fileName; }
+ QCString pageTitle() const { return m_pageTitle; }
+ QCString sectionTitle() const { return m_secTitle; }
- RefList(const char *listName,
- const char *pageTitle,const char *secTitle
- );
- ~RefList();
- void insertIntoList(const char *key,RefItem *item);
void generatePage();
private:
- int m_id;
+ int m_id = 0;
QCString m_listName;
QCString m_fileName;
QCString m_pageTitle;
QCString m_secTitle;
- SortedRefItems *m_itemList;
- QIntDict<RefItem> *m_dict;
- QIntDictIterator<RefItem> *m_dictIterator;
+ std::vector< std::unique_ptr< RefItem > > m_entries;
+ std::unordered_map< int, RefItem* > m_lookup;
+};
+
+class RefListManager : public LinkedMap<RefList>
+{
+ public:
+ static RefListManager &instance()
+ {
+ static RefListManager rlm;
+ return rlm;
+ }
+
+ private:
+ RefListManager() {}
+ RefListManager(const RefListManager &other) = delete;
+ RefListManager &operator=(const RefListManager &other) = delete;
};
#endif