logo       
Google Custom Search
    AddThis Social Bookmark Button

src/d2c/runtime/dylan deque.dylan, 1.7.10.2.2.9, 1.7.10.2.2.10: msg#00214

Subject: src/d2c/runtime/dylan deque.dylan, 1.7.10.2.2.9, 1.7.10.2.2.10
Update of /scm/cvs/src/d2c/runtime/dylan
In directory gauss.gwydiondylan.org:/tmp/cvs-serv12489

Modified Files:
      Tag: gd-2-5-collection-optimization
        deque.dylan 
Log Message:
job: 7094
Minor tweaks and cleanup.


Index: deque.dylan
===================================================================
RCS file: /scm/cvs/src/d2c/runtime/dylan/deque.dylan,v
retrieving revision 1.7.10.2.2.9
retrieving revision 1.7.10.2.2.10
diff -u -d -r1.7.10.2.2.9 -r1.7.10.2.2.10
--- deque.dylan 15 Oct 2004 21:22:30 -0000      1.7.10.2.2.9
+++ deque.dylan 27 Oct 2004 22:02:11 -0000      1.7.10.2.2.10
@@ -465,41 +465,37 @@
 define sealed method concatenate!
     (deq :: <object-deque>, #rest more-sequences)
  => (deq :: <object-deque>)
-  let current = deq.size;
+  let current-size = deq.size;
 
-  let new-size = current;
+  let needed-size = current-size;
   for (sequence in more-sequences)
-    let seq-size :: <integer> = sequence.size;
-    new-size := new-size + seq-size;
+    needed-size := needed-size + check-type(sequence.size, <integer>);
   end;
-    
-  if (new-size >= deq.deq-data.size)
-    let new-size = calc-deque-size(new-size);
-    let data = deq.deq-data;
-    let offset = deq.deq-current-offset;
-    let mask = deq.deq-data-mask;
-    let new-data = make(<simple-object-vector>, size: new-size);
-    for (i from 0 below current)
-      %element(new-data, i) := %element(data, logand(i + offset, mask));
-    end;
-    deq.deq-data := new-data;
-    deq.deq-current-offset := 0;
-    deq.deq-data-mask := new-size - 1;
-  end if;
 
   let data = deq.deq-data;
   let offset = deq.deq-current-offset;
   let mask = deq.deq-data-mask;
+  if (needed-size >= data.size)
+    let new-data-size = calc-deque-size(needed-size);
+    let new-data = make(<simple-object-vector>, size: new-data-size);
+    for (i from 0 below current-size)
+      %element(new-data, i) := %element(data, logand(i + offset, mask));
+    end;
+    data := deq.deq-data := new-data;
+    offset := deq.deq-current-offset := 0;
+    mask := deq.deq-data-mask := new-data-size - 1;
+  end if;
+
   for (sequence in more-sequences,
-      outer-index = current
+      outer-index = current-size
         then for (item in sequence, index from outer-index)
                %element(data, logand(index + offset, mask)) := item;
              finally
                index;
              end for)
   end for;
-  
-  deq.deq-current-size := new-size;
+
+  deq.deq-current-size := needed-size;
   deq;
 end method concatenate!;
 
@@ -616,10 +612,12 @@
 define sealed method as
     (class == <deque>, ssv :: <stretchy-object-vector>)
     => res :: <object-deque>;
-  let res = make(<object-deque>, size: ssv.size);
+  let sz = ssv.size;
+  let res = make(<object-deque>, size: sz);
   let res-data = res.deq-data;
-  for (elt keyed-by index in ssv)
-    %element(res-data, index) := elt;
+  let data = ssv.ssv-data;
+  for (index from 0 below sz)
+    %element(res-data, index) := %element(data, index);
   end;
   res;
 end method as;

_______________________________________________
Gd-chatter mailing list
Gd-chatter@xxxxxxxxxxxxxxxx
https://gauss.gwydiondylan.org/mailman/listinfo/gd-chatter




Try Searching:
servers, voip, java, networking, microsoft ...
<Prev in Thread] Current Thread [Next in Thread>