From 2601f870ec25457696960aed15225d7b279e106f Mon Sep 17 00:00:00 2001 From: Matthias Koefferlein Date: Mon, 5 Dec 2022 02:28:08 +0100 Subject: [PATCH] Fixed compile errors --- src/db/db/dbHierNetworkProcessor.h | 461 ++++++++++++----------------- src/tl/tl/tlSList.h | 6 +- 2 files changed, 197 insertions(+), 270 deletions(-) diff --git a/src/db/db/dbHierNetworkProcessor.h b/src/db/db/dbHierNetworkProcessor.h index 2c6b10cbd..424f3313f 100644 --- a/src/db/db/dbHierNetworkProcessor.h +++ b/src/db/db/dbHierNetworkProcessor.h @@ -32,6 +32,7 @@ #include "dbInstElement.h" #include "tlEquivalenceClusters.h" #include "tlAssert.h" +#include "tlSList.h" #include #include @@ -211,273 +212,6 @@ private: edge_connectivity_type m_ec; }; -/** - * @brief The instance information for a cluster - */ -class DB_PUBLIC ClusterInstElement -{ -public: - ClusterInstElement (const db::InstElement &ie) - { - if (ie.array_inst.at_end ()) { - - m_inst_cell_index = std::numeric_limits::max (); - m_inst_trans = db::ICplxTrans (); - m_inst_prop_id = 0; - - } else { - - m_inst_cell_index = ie.inst_ptr.cell_index (); - m_inst_trans = ie.complex_trans (); - m_inst_prop_id = ie.inst_ptr.prop_id (); - - } - } - - ClusterInstElement (db::cell_index_type inst_cell_index, const db::ICplxTrans &inst_trans, db::properties_id_type inst_prop_id) - : m_inst_cell_index (inst_cell_index), m_inst_trans (inst_trans), m_inst_prop_id (inst_prop_id) - { - // .. nothing yet .. - } - - ClusterInstElement () - : m_inst_cell_index (std::numeric_limits::max ()), m_inst_trans (), m_inst_prop_id (0) - { - // .. nothing yet .. - } - - /** - * @brief Returns true, if the cluster does not have an instance - */ - bool has_instance () const - { - return m_inst_cell_index != std::numeric_limits::max (); - } - - /** - * @brief Gets the cell index of the cell which is instantiated - */ - db::cell_index_type inst_cell_index () const - { - return m_inst_cell_index; - } - - /** - * @brief Gets the instance transformation - */ - const db::ICplxTrans &inst_trans () const - { - return m_inst_trans; - } - - /** - * @brief Gets the instance properties id - */ - db::properties_id_type inst_prop_id () const - { - return m_inst_prop_id; - } - - /** - * @brief Sets the instance properties id - */ - void set_inst_prop_id (db::properties_id_type pid) - { - m_inst_prop_id = pid; - } - - /** - * @brief Transform with the given transformation - */ - void transform (const db::ICplxTrans &tr) - { - m_inst_trans = tr * m_inst_trans; - } - - /** - * @brief Equality - */ - bool operator== (const ClusterInstElement &other) const - { - return m_inst_cell_index == other.m_inst_cell_index && m_inst_trans.equal (other.m_inst_trans) && m_inst_prop_id == other.m_inst_prop_id; - } - - /** - * @brief Inequality - */ - bool operator!= (const ClusterInstElement &other) const - { - return ! operator== (other); - } - - /** - * @brief Less operator - */ - bool operator< (const ClusterInstElement &other) const - { - if (m_inst_cell_index != other.m_inst_cell_index) { - return m_inst_cell_index < other.m_inst_cell_index; - } - if (! m_inst_trans.equal (other.m_inst_trans)) { - return m_inst_trans.less (other.m_inst_trans); - } - return m_inst_prop_id < other.m_inst_prop_id; - } - -private: - db::cell_index_type m_inst_cell_index; - db::ICplxTrans m_inst_trans; - db::properties_id_type m_inst_prop_id; -}; - -/** - * @brief A connection to a cluster in a child instance - */ -class DB_PUBLIC ClusterInstance - : public ClusterInstElement -{ -public: - ClusterInstance (size_t id, db::cell_index_type inst_cell_index, const db::ICplxTrans &inst_trans, db::properties_id_type inst_prop_id) - : ClusterInstElement (inst_cell_index, inst_trans, inst_prop_id), m_id (id) - { - // .. nothing yet .. - } - - ClusterInstance (size_t id, const db::InstElement &inst_element) - : ClusterInstElement (inst_element), m_id (id) - { - // .. nothing yet .. - } - - ClusterInstance (size_t id) - : ClusterInstElement (), m_id (id) - { - // .. nothing yet .. - } - - ClusterInstance () - : ClusterInstElement (), m_id (0) - { - // .. nothing yet .. - } - - /** - * @brief Gets the cluster ID - */ - size_t id () const - { - return m_id; - } - - /** - * @brief Equality - */ - bool operator== (const ClusterInstance &other) const - { - return m_id == other.m_id && ClusterInstElement::operator== (other); - } - - /** - * @brief Inequality - */ - bool operator!= (const ClusterInstance &other) const - { - return ! operator== (other); - } - - /** - * @brief Less operator - */ - bool operator< (const ClusterInstance &other) const - { - if (m_id != other.m_id) { - return m_id < other.m_id; - } - return ClusterInstElement::operator< (other); - } - -private: - size_t m_id; -}; - -/** - * @brief A class representing a list of ClusterInstance objects - * - * It is using a std::list internally, but adds fast size support for STLs which do not have that. - */ -class DB_PUBLIC ClusterInstanceList -{ -public: - typedef std::list inner_list; - typedef inner_list::iterator iterator; - typedef inner_list::const_iterator const_iterator; - - ClusterInstanceList () - : m_list (), m_size (0) - { - // .. nothing yet .. - } - - ClusterInstanceList (const ClusterInstanceList &other) - : m_list (other.m_list), m_size (other.m_size) - { - // .. nothing yet .. - } - - ClusterInstanceList (ClusterInstanceList &&other) - : m_list (other.m_list), m_size (other.m_size) - { - // .. nothing yet .. - } - - ClusterInstanceList &operator= (const ClusterInstanceList &other) - { - if (this != &other) { - m_list = other.m_list; - m_size = other.m_size; - } - return *this; - } - - iterator begin () { return m_list.begin (); } - iterator end () { return m_list.end (); } - const_iterator begin () const { return m_list.begin (); } - const_iterator end () const { return m_list.end (); } - - bool empty () const - { - return m_list.empty (); - } - - void push_back (const ClusterInstance &inst) - { - m_list.push_back (inst); - ++m_size; - } - - void push_back (ClusterInstance &&inst) - { - m_list.push_back (inst); - ++m_size; - } - - void splice (ClusterInstanceList &other) - { - m_size += other.m_size; - m_list.splice (m_list.end (), other.m_list, other.m_list.begin (), other.m_list.end ()); - other.m_size = 0; - } - - size_t size () const - { - return m_size; - } - -private: - inner_list m_list; - size_t m_size; -}; - /** * @brief Represents a cluster of shapes * @@ -863,6 +597,195 @@ inline void mem_stat (MemStatistics *stat, MemStatistics::purpose_t purpose, int x.mem_stat (stat, purpose, cat, no_self, parent); } +/** + * @brief The instance information for a cluster + */ +class DB_PUBLIC ClusterInstElement +{ +public: + ClusterInstElement (const db::InstElement &ie) + { + if (ie.array_inst.at_end ()) { + + m_inst_cell_index = std::numeric_limits::max (); + m_inst_trans = db::ICplxTrans (); + m_inst_prop_id = 0; + + } else { + + m_inst_cell_index = ie.inst_ptr.cell_index (); + m_inst_trans = ie.complex_trans (); + m_inst_prop_id = ie.inst_ptr.prop_id (); + + } + } + + ClusterInstElement (db::cell_index_type inst_cell_index, const db::ICplxTrans &inst_trans, db::properties_id_type inst_prop_id) + : m_inst_cell_index (inst_cell_index), m_inst_trans (inst_trans), m_inst_prop_id (inst_prop_id) + { + // .. nothing yet .. + } + + ClusterInstElement () + : m_inst_cell_index (std::numeric_limits::max ()), m_inst_trans (), m_inst_prop_id (0) + { + // .. nothing yet .. + } + + /** + * @brief Returns true, if the cluster does not have an instance + */ + bool has_instance () const + { + return m_inst_cell_index != std::numeric_limits::max (); + } + + /** + * @brief Gets the cell index of the cell which is instantiated + */ + db::cell_index_type inst_cell_index () const + { + return m_inst_cell_index; + } + + /** + * @brief Gets the instance transformation + */ + const db::ICplxTrans &inst_trans () const + { + return m_inst_trans; + } + + /** + * @brief Gets the instance properties id + */ + db::properties_id_type inst_prop_id () const + { + return m_inst_prop_id; + } + + /** + * @brief Sets the instance properties id + */ + void set_inst_prop_id (db::properties_id_type pid) + { + m_inst_prop_id = pid; + } + + /** + * @brief Transform with the given transformation + */ + void transform (const db::ICplxTrans &tr) + { + m_inst_trans = tr * m_inst_trans; + } + + /** + * @brief Equality + */ + bool operator== (const ClusterInstElement &other) const + { + return m_inst_cell_index == other.m_inst_cell_index && m_inst_trans.equal (other.m_inst_trans) && m_inst_prop_id == other.m_inst_prop_id; + } + + /** + * @brief Inequality + */ + bool operator!= (const ClusterInstElement &other) const + { + return ! operator== (other); + } + + /** + * @brief Less operator + */ + bool operator< (const ClusterInstElement &other) const + { + if (m_inst_cell_index != other.m_inst_cell_index) { + return m_inst_cell_index < other.m_inst_cell_index; + } + if (! m_inst_trans.equal (other.m_inst_trans)) { + return m_inst_trans.less (other.m_inst_trans); + } + return m_inst_prop_id < other.m_inst_prop_id; + } + +private: + db::cell_index_type m_inst_cell_index; + db::ICplxTrans m_inst_trans; + db::properties_id_type m_inst_prop_id; +}; + +/** + * @brief A connection to a cluster in a child instance + */ +class DB_PUBLIC ClusterInstance + : public ClusterInstElement +{ +public: + ClusterInstance (size_t id, db::cell_index_type inst_cell_index, const db::ICplxTrans &inst_trans, db::properties_id_type inst_prop_id) + : ClusterInstElement (inst_cell_index, inst_trans, inst_prop_id), m_id (id) + { + // .. nothing yet .. + } + + ClusterInstance (size_t id, const db::InstElement &inst_element) + : ClusterInstElement (inst_element), m_id (id) + { + // .. nothing yet .. + } + + ClusterInstance (size_t id) + : ClusterInstElement (), m_id (id) + { + // .. nothing yet .. + } + + ClusterInstance () + : ClusterInstElement (), m_id (0) + { + // .. nothing yet .. + } + + /** + * @brief Gets the cluster ID + */ + size_t id () const + { + return m_id; + } + + /** + * @brief Equality + */ + bool operator== (const ClusterInstance &other) const + { + return m_id == other.m_id && ClusterInstElement::operator== (other); + } + + /** + * @brief Inequality + */ + bool operator!= (const ClusterInstance &other) const + { + return ! operator== (other); + } + + /** + * @brief Less operator + */ + bool operator< (const ClusterInstance &other) const + { + if (m_id != other.m_id) { + return m_id < other.m_id; + } + return ClusterInstElement::operator< (other); + } + +private: + size_t m_id; +}; + typedef std::list > cluster_instance_pair_list_type; inline bool equal_array_delegates (const db::ArrayBase *a, const db::ArrayBase *b) @@ -1118,7 +1041,7 @@ public: private: typename local_clusters::const_iterator m_lc_iter; - typedef ClusterInstanceList connections_type; + typedef tl::slist connections_type; typename std::map::id_type, connections_type>::const_iterator m_x_iter, m_x_iter_end; }; @@ -1138,7 +1061,7 @@ class DB_PUBLIC_TEMPLATE connected_clusters { public: typedef typename local_clusters::id_type id_type; - typedef ClusterInstanceList connections_type; + typedef tl::slist connections_type; typedef typename local_clusters::box_type box_type; typedef connected_clusters_iterator all_iterator; typedef typename std::map::id_type, connections_type>::const_iterator connections_iterator; diff --git a/src/tl/tl/tlSList.h b/src/tl/tl/tlSList.h index 44d16611c..5e170ead7 100644 --- a/src/tl/tl/tlSList.h +++ b/src/tl/tl/tlSList.h @@ -59,6 +59,8 @@ private: }; public: + class const_iterator; + class iterator { public: @@ -84,6 +86,7 @@ public: bool operator!= (iterator other) const { return mp_p != other.mp_p; } private: + friend class slist::const_iterator; node_type *mp_p; }; @@ -95,6 +98,7 @@ public: typedef const T &reference; typedef const T *pointer; + const_iterator (iterator i) : mp_p (i.mp_p) { } const_iterator (const node_type *p = 0) : mp_p (p) { } const_iterator operator++ () { mp_p = mp_p->next; return *this; } @@ -116,7 +120,7 @@ public: }; slist () - : mp_first (0), mp_last (0) + : mp_first (0), mp_last (0), m_size (0) { // .. nothing yet .. }