Changeset 81ab5eb for libcfa/src/collections/list2.hfa
- Timestamp:
- Mar 29, 2026, 9:52:51 PM (8 days ago)
- Branches:
- master
- Children:
- e6e250d
- Parents:
- 00675ed4
- File:
-
- 1 edited
-
libcfa/src/collections/list2.hfa (modified) (13 diffs)
Legend:
- Unmodified
- Added
- Removed
-
libcfa/src/collections/list2.hfa
r00675ed4 r81ab5eb 19 19 // Created On : Wed Apr 22 18:00:00 2020 20 20 // Last Modified By : Peter A. Buhr 21 // Last Modified On : Tue Mar 24 22:20:56202622 // Update Count : 821 // Last Modified On : Sun Mar 29 21:47:53 2026 22 // Update Count : 12 23 23 // 24 24 … … 206 206 }; 207 207 208 static inline tE * $get_list_origin_addr( dlist(tE, tLinks) & l st ) {208 static inline tE * $get_list_origin_addr( dlist(tE, tLinks) & list ) { 209 209 dlink(tE) & link_from_null = ( * (tE *) 0p )`inner; 210 210 ptrdiff_t link_offset = (ptrdiff_t) & link_from_null; 211 size_t origin_addr = ((size_t) & l st) - link_offset;211 size_t origin_addr = ((size_t) & list) - link_offset; 212 212 size_t preResult = ORIGIN_TAG_ENABL( origin_addr ); 213 213 return (tE *)preResult; … … 430 430 } 431 431 432 static inline tE & first( dlist(tE, tLinks) & l st ) {433 verify (&l st != 0p);434 dlink(tE) * firstLnk = l st.next;432 static inline tE & first( dlist(tE, tLinks) & list ) { 433 verify (&list != 0p); 434 dlink(tE) * firstLnk = list.next; 435 435 if (ORIGIN_TAG_QUERY((size_t)firstLnk)) return * 0p; 436 436 tytagref( tLinks, dlink(tE) ) firstLnkTagged = {*firstLnk}; 437 437 return downcast$( firstLnkTagged ); 438 438 } 439 static inline tE & last ( dlist(tE, tLinks) & l st ) {440 verify (&l st != 0p);441 dlink(tE) * lastLnk = l st.prev;439 static inline tE & last ( dlist(tE, tLinks) & list ) { 440 verify (&list != 0p); 441 dlink(tE) * lastLnk = list.prev; 442 442 if (ORIGIN_TAG_QUERY((size_t)lastLnk)) return * 0p; 443 443 tytagref( tLinks, dlink(tE) ) lastLnkTagged = {*lastLnk}; … … 445 445 } 446 446 447 static inline bool isEmpty( dlist(tE, tLinks) & lst ) {448 verify (&l st != 0p);449 if ( & first(l st) == 0p || & last(lst) == 0p ) {450 verify( & last(l st) == 0p && & last(lst) == 0p );447 static inline bool empty( dlist(tE, tLinks) & list ) { 448 verify (&list != 0p); 449 if ( & first(list) == 0p || & last(list) == 0p ) { 450 verify( & last(list) == 0p && & last(list) == 0p ); 451 451 return true; 452 452 } 453 453 return false; 454 } 455 456 static inline bool isEmpty( dlist(tE, tLinks) & list ) __attribute__ ((deprecated)); 457 static inline bool isEmpty( dlist(tE, tLinks) & list ) { 458 return empty( list ); 454 459 } 455 460 … … 469 474 } 470 475 471 static inline tE & iter( dlist(tE, tLinks) & l st ) {472 tE * origin = $get_list_origin_addr( l st );476 static inline tE & iter( dlist(tE, tLinks) & list ) { 477 tE * origin = $get_list_origin_addr( list ); 473 478 return *origin; 474 479 } … … 538 543 // Applies knowledge of tag pattern around head (unknown to optimizer) to reduce runtime tag operations. 539 544 540 static inline void insert_first( dlist(tE, tLinks) &l st, tE & e ) {545 static inline void insert_first( dlist(tE, tLinks) &list, tE & e ) { 541 546 dlink(tE) & linkToInsert = e`inner; 542 547 NOLOOSE( … … 548 553 verify(ORIGIN_TAG_CLEAR((size_t)linkToInsert.next) == (size_t)&linkToInsert); 549 554 ) 550 dlink(tE) & list_pos_links = l st;555 dlink(tE) & list_pos_links = list; 551 556 MAYBE_INSERT_READ_EARLY( 552 557 dlink(tE) & afterLinks = * (dlink(tE) *) ORIGIN_TAG_CLEAR( (size_t) list_pos_links.next ); … … 577 582 } 578 583 579 static inline void insert_last( dlist(tE, tLinks) &l st, tE & e ) {584 static inline void insert_last( dlist(tE, tLinks) &list, tE & e ) { 580 585 dlink(tE) & linkToInsert = e`inner; 581 586 NOLOOSE( … … 587 592 verify(ORIGIN_TAG_CLEAR((size_t)linkToInsert.prev) == (size_t)&linkToInsert); 588 593 ) 589 dlink(tE) & list_pos_links = l st;594 dlink(tE) & list_pos_links = list; 590 595 MAYBE_INSERT_READ_EARLY( 591 596 dlink(tE) & beforeLinks = * (dlink(tE) *) ORIGIN_TAG_CLEAR( (size_t) list_pos_links.prev ); … … 630 635 } 631 636 632 static inline tE & remove_first( dlist(tE, tLinks) &l st ) {633 verify (&l st != 0p);634 dlink(tE) & list_links = l st;637 static inline tE & remove_first( dlist(tE, tLinks) &list ) { 638 verify (&list != 0p); 639 dlink(tE) & list_links = list; 635 640 // call is valid on empty list; when so, list_links.next and after_links.prev have otags set 636 641 … … 657 662 } 658 663 659 static inline tE & remove_last( dlist(tE, tLinks) &l st ) {660 verify (&l st != 0p);661 dlink(tE) & list_links = l st;664 static inline tE & remove_last( dlist(tE, tLinks) &list ) { 665 verify (&list != 0p); 666 dlink(tE) & list_links = list; 662 667 // call is valid on empty list; when so, list_links.prev and before_links.next have otags set 663 668 … … 684 689 } 685 690 686 static inline tE & try_pop_first( dlist(tE, tLinks) &l st ) {687 tE & first_inlist = first(l st);691 static inline tE & try_pop_first( dlist(tE, tLinks) &list ) { 692 tE & first_inlist = first(list); 688 693 tE & first_item = first_inlist; 689 694 if (&first_item) remove(first_inlist); // TODO: should it use pop_front? … … 691 696 } 692 697 693 static inline tE & try_pop_last( dlist(tE, tLinks) &l st ) {694 tE & last_inlist = last(l st);698 static inline tE & try_pop_last( dlist(tE, tLinks) &list ) { 699 tE & last_inlist = last(list); 695 700 tE & last_item = last_inlist; 696 701 if (&last_item) remove(last_inlist); // TODO: should it use pop_back?
Note:
See TracChangeset
for help on using the changeset viewer.