[cvs] / jsr166 / src / main / java / util / concurrent / LinkedTransferQueue.java Repository:
ViewVC logotype

Diff of /jsr166/src/main/java/util/concurrent/LinkedTransferQueue.java

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1.107, Sat Dec 24 11:00:36 2016 UTC revision 1.108, Sat Dec 24 16:56:09 2016 UTC
# Line 1179  Line 1179 
1179      }      }
1180    
1181      /**      /**
      * Main implementation of remove(Object)  
      */  
     private boolean findAndRemove(Object e) {  
         if (e != null) {  
             for (Node pred = null, p = head; p != null; ) {  
                 Object item = p.item;  
                 if (p.isData) {  
                     if (item != null && e.equals(item) &&  
                         p.tryMatchData()) {  
                         unsplice(pred, p);  
                         return true;  
                     }  
                 }  
                 else if (item == null)  
                     break;  
                 pred = p;  
                 if ((p = p.next) == pred) { // stale  
                     pred = null;  
                     p = head;  
                 }  
             }  
         }  
         return false;  
     }  
   
     /**  
1182       * Creates an initially empty {@code LinkedTransferQueue}.       * Creates an initially empty {@code LinkedTransferQueue}.
1183       */       */
1184      public LinkedTransferQueue() {      public LinkedTransferQueue() {
# Line 1472  Line 1446 
1446       * @return {@code true} if this queue changed as a result of the call       * @return {@code true} if this queue changed as a result of the call
1447       */       */
1448      public boolean remove(Object o) {      public boolean remove(Object o) {
1449          return findAndRemove(o);          if (o == null)
1450                return false;
1451            restartFromHead: for (;;) {
1452                for (Node pred = null, p = head; p != null; ) {
1453                    Object item = p.item;
1454                    if (p.isData) {
1455                        if (item != null
1456                            && o.equals(item)
1457                            && p.tryMatchData()) {
1458                            unsplice(pred, p);
1459                            return true;
1460                        }
1461                    }
1462                    else if (item == null)
1463                        break;
1464                    if ((pred = p) == (p = p.next))
1465                        continue restartFromHead;
1466                }
1467                return false;
1468            }
1469      }      }
1470    
1471      /**      /**

Legend:
Removed from v.1.107  
changed lines
  Added in v.1.108

Doug Lea
ViewVC Help
Powered by ViewVC 1.0.8