Ignore:
Timestamp:
Apr 2, 2021, 12:23:21 PM (3 years ago)
Author:
Michael Brooks <mlbrooks@…>
Branches:
ADT, arm-eh, ast-experimental, enum, forall-pointer-decay, jacob/cs343-translation, master, new-ast-unique-expr, pthread-emulation, qualifiedEnum
Children:
c7625e0
Parents:
7a2972b9
Message:

Dlist adjustments for performance and perf testability.

Replaced a polymorphic helper routine with two code-duplicated monomorphic routines.

Replaced asserts with verifies.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • libcfa/src/containers/list.hfa

    r7a2972b9 r7ee3c87  
    8383                (this.is_terminator){ 1 };
    8484        }
    85         forall ( tInit | { void ?{}( $mgd_link(tE) &, tInit); } )
    86         static inline void ?=?( $mgd_link(tE) &this, tInit i ) {
    87                 ^?{}( this );
    88                 ?{}( this, i );
     85        static inline void ?=?( $mgd_link(tE) &this, tE* elem ) {
     86                this.elem = elem ;
     87                this.terminator = 0p;
     88                this.is_terminator = 0;
     89        }
     90        static inline void ?=?( $mgd_link(tE) &this, void * terminator ) {
     91                this.elem = 0p;
     92                this.terminator = terminator;
     93                this.is_terminator = 1;
    8994        }
    9095        struct $dlinks {
     
    181186
    182187        static inline void insert_after(Tnode &list_pos, Telem &to_insert) {
    183                 assert (&list_pos != 0p);
    184                 assert (&to_insert != 0p);
     188                verify (&list_pos != 0p);
     189                verify (&to_insert != 0p);
    185190                Tnode &singleton_to_insert = $tempcv_e2n(to_insert);
    186                 assert($prev_link(singleton_to_insert).elem == 0p);
    187                 assert($next_link(singleton_to_insert).elem == 0p);
     191                verify($prev_link(singleton_to_insert).elem == 0p);
     192                verify($next_link(singleton_to_insert).elem == 0p);
    188193                $prev_link(singleton_to_insert) = & $tempcv_n2e(list_pos);
    189194                $next_link(singleton_to_insert) = $next_link(list_pos);
     
    204209
    205210        static inline void insert_before(Tnode &list_pos, Telem &to_insert) {
    206                 assert (&list_pos != 0p);
    207                 assert (&to_insert != 0p);
     211                verify (&list_pos != 0p);
     212                verify (&to_insert != 0p);
    208213                Tnode &singleton_to_insert = $tempcv_e2n(to_insert);
    209                 assert($prev_link(singleton_to_insert).elem == 0p);
    210                 assert($next_link(singleton_to_insert).elem == 0p);
     214                verify($prev_link(singleton_to_insert).elem == 0p);
     215                verify($next_link(singleton_to_insert).elem == 0p);
    211216                $next_link(singleton_to_insert) = & $tempcv_n2e(list_pos);
    212217                $prev_link(singleton_to_insert) = $prev_link(list_pos);
     
    227232
    228233    static inline void insert_first(dlist(Tnode, Telem) &list, Telem &to_insert) {
    229                 assert (&list != 0p);
    230                 assert (&to_insert != 0p);
     234                verify (&list != 0p);
     235                verify (&to_insert != 0p);
    231236                Tnode &singleton_to_insert = $tempcv_e2n(to_insert);
    232                 assert($prev_link(singleton_to_insert).elem == 0p);
    233                 assert($next_link(singleton_to_insert).elem == 0p);
     237                verify($prev_link(singleton_to_insert).elem == 0p);
     238                verify($next_link(singleton_to_insert).elem == 0p);
    234239
    235240                $prev_link(singleton_to_insert) = (void*) &list;
     
    249254
    250255    static inline void insert_last(dlist(Tnode, Telem) &list, Telem &to_insert) {
    251                 assert (&list != 0p);
    252                 assert (&to_insert != 0p);
     256                verify (&list != 0p);
     257                verify (&to_insert != 0p);
    253258                Tnode &singleton_to_insert = $tempcv_e2n(to_insert);
    254                 assert($next_link(singleton_to_insert).elem == 0p);
    255                 assert($prev_link(singleton_to_insert).elem == 0p);
     259                verify($next_link(singleton_to_insert).elem == 0p);
     260                verify($prev_link(singleton_to_insert).elem == 0p);
    256261
    257262                $next_link(singleton_to_insert) = (void*) &list;
     
    271276
    272277    static inline void remove(Tnode &list_pos) {
    273                 assert( &list_pos != 0p );
     278                verify( &list_pos != 0p );
    274279
    275280                $mgd_link(Telem) &incoming_from_prev = *0p;
     
    308313
    309314        static inline bool ?`is_empty(dlist(Tnode, Telem) &list) {
    310                 assert( &list != 0p );
     315                verify( &list != 0p );
    311316                $dlinks(Telem) *listLinks = & list.$links;
    312317                if (listLinks->next.is_terminator) {
    313                         assert(listLinks->prev.is_terminator);
    314                         assert(listLinks->next.terminator);
    315                         assert(listLinks->prev.terminator);
     318                        verify(listLinks->prev.is_terminator);
     319                        verify(listLinks->next.terminator);
     320                        verify(listLinks->prev.terminator);
    316321                        return true;
    317322                } else {
    318                         assert(!listLinks->prev.is_terminator);
    319                         assert(listLinks->next.elem);
    320                         assert(listLinks->prev.elem);
     323                        verify(!listLinks->prev.is_terminator);
     324                        verify(listLinks->next.elem);
     325                        verify(listLinks->prev.elem);
    321326                        return false;
    322327                }
     
    324329
    325330        static inline Telem & pop_first(dlist(Tnode, Telem) &list) {
    326                 assert( &list != 0p );
    327                 assert( !list`is_empty );
     331                verify( &list != 0p );
     332                verify( !list`is_empty );
    328333                $dlinks(Telem) *listLinks = & list.$links;
    329334                Telem & first = *listLinks->next.elem;
     
    334339
    335340        static inline Telem & pop_last(dlist(Tnode, Telem) &list) {
    336                 assert( &list != 0p );
    337                 assert( !list`is_empty );
     341                verify( &list != 0p );
     342                verify( !list`is_empty );
    338343                $dlinks(Telem) *listLinks = & list.$links;
    339344                Telem & last = *listLinks->prev.elem;
Note: See TracChangeset for help on using the changeset viewer.