Mercurial > hg4j
annotate src/org/tmatesoft/hg/internal/IntVector.java @ 614:1d1e96f5a908
Added tag v1.1m4 for changeset f41dd9a3b8af
| author | Artem Tikhomirov <tikhomirov.artem@gmail.com> | 
|---|---|
| date | Fri, 10 May 2013 17:31:54 +0200 | 
| parents | f41dd9a3b8af | 
| children | 58a6900f845d | 
| rev | line source | 
|---|---|
| 
288
 
b11f6a08f748
Avoid boxing int values and list resizes on revlog read
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
1 /* | 
| 
545
 
15b406c7cd9d
First round of annotate file is functional
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
329 
diff
changeset
 | 
2 * Copyright (c) 2011-2013 TMate Software Ltd | 
| 
288
 
b11f6a08f748
Avoid boxing int values and list resizes on revlog read
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
3 * | 
| 
 
b11f6a08f748
Avoid boxing int values and list resizes on revlog read
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
4 * This program is free software; you can redistribute it and/or modify | 
| 
 
b11f6a08f748
Avoid boxing int values and list resizes on revlog read
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
5 * it under the terms of the GNU General Public License as published by | 
| 
 
b11f6a08f748
Avoid boxing int values and list resizes on revlog read
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
6 * the Free Software Foundation; version 2 of the License. | 
| 
 
b11f6a08f748
Avoid boxing int values and list resizes on revlog read
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
7 * | 
| 
 
b11f6a08f748
Avoid boxing int values and list resizes on revlog read
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
8 * This program is distributed in the hope that it will be useful, | 
| 
 
b11f6a08f748
Avoid boxing int values and list resizes on revlog read
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of | 
| 
 
b11f6a08f748
Avoid boxing int values and list resizes on revlog read
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | 
| 
 
b11f6a08f748
Avoid boxing int values and list resizes on revlog read
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
11 * GNU General Public License for more details. | 
| 
 
b11f6a08f748
Avoid boxing int values and list resizes on revlog read
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
12 * | 
| 
 
b11f6a08f748
Avoid boxing int values and list resizes on revlog read
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
13 * For information on how to redistribute this software under | 
| 
 
b11f6a08f748
Avoid boxing int values and list resizes on revlog read
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
14 * the terms of a license other than GNU General Public License | 
| 
 
b11f6a08f748
Avoid boxing int values and list resizes on revlog read
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
15 * contact TMate Software at support@hg4j.com | 
| 
 
b11f6a08f748
Avoid boxing int values and list resizes on revlog read
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
16 */ | 
| 
 
b11f6a08f748
Avoid boxing int values and list resizes on revlog read
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
17 package org.tmatesoft.hg.internal; | 
| 
 
b11f6a08f748
Avoid boxing int values and list resizes on revlog read
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
18 | 
| 
561
 
d3c71498919c
Do not process child revisions before all possible parent paths were visited
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
552 
diff
changeset
 | 
19 import java.util.Arrays; | 
| 
 
d3c71498919c
Do not process child revisions before all possible parent paths were visited
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
552 
diff
changeset
 | 
20 | 
| 
288
 
b11f6a08f748
Avoid boxing int values and list resizes on revlog read
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
21 /** | 
| 
328
 
a674b8590362
Move file tree history to upper API level
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
288 
diff
changeset
 | 
22 * Vector of primitive values | 
| 
 
a674b8590362
Move file tree history to upper API level
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
288 
diff
changeset
 | 
23 * | 
| 
288
 
b11f6a08f748
Avoid boxing int values and list resizes on revlog read
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
24 * @author Artem Tikhomirov | 
| 
 
b11f6a08f748
Avoid boxing int values and list resizes on revlog read
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
25 * @author TMate Software Ltd. | 
| 
 
b11f6a08f748
Avoid boxing int values and list resizes on revlog read
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
26 */ | 
| 
328
 
a674b8590362
Move file tree history to upper API level
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
288 
diff
changeset
 | 
27 public class IntVector { | 
| 
288
 
b11f6a08f748
Avoid boxing int values and list resizes on revlog read
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
28 | 
| 
 
b11f6a08f748
Avoid boxing int values and list resizes on revlog read
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
29 private int[] data; | 
| 
 
b11f6a08f748
Avoid boxing int values and list resizes on revlog read
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
30 private final int increment; | 
| 
 
b11f6a08f748
Avoid boxing int values and list resizes on revlog read
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
31 private int count; | 
| 
 
b11f6a08f748
Avoid boxing int values and list resizes on revlog read
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
32 | 
| 
 
b11f6a08f748
Avoid boxing int values and list resizes on revlog read
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
33 | 
| 
 
b11f6a08f748
Avoid boxing int values and list resizes on revlog read
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
34 public IntVector() { | 
| 
 
b11f6a08f748
Avoid boxing int values and list resizes on revlog read
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
35 this(16, -1); | 
| 
 
b11f6a08f748
Avoid boxing int values and list resizes on revlog read
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
36 } | 
| 
 
b11f6a08f748
Avoid boxing int values and list resizes on revlog read
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
37 | 
| 
 
b11f6a08f748
Avoid boxing int values and list resizes on revlog read
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
38 // increment == -1: grow by power of two. | 
| 
 
b11f6a08f748
Avoid boxing int values and list resizes on revlog read
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
39 // increment == 0: no resize (Exception will be thrown on attempt to add past capacity) | 
| 
 
b11f6a08f748
Avoid boxing int values and list resizes on revlog read
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
40 public IntVector(int initialCapacity, int increment) { | 
| 
 
b11f6a08f748
Avoid boxing int values and list resizes on revlog read
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
41 data = new int[initialCapacity]; | 
| 
 
b11f6a08f748
Avoid boxing int values and list resizes on revlog read
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
42 this.increment = increment; | 
| 
 
b11f6a08f748
Avoid boxing int values and list resizes on revlog read
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
43 } | 
| 
 
b11f6a08f748
Avoid boxing int values and list resizes on revlog read
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
44 | 
| 
 
b11f6a08f748
Avoid boxing int values and list resizes on revlog read
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
45 public void add(int v) { | 
| 
 
b11f6a08f748
Avoid boxing int values and list resizes on revlog read
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
46 if (count == data.length) { | 
| 
551
 
4ea0351ca878
Better (precise) name for diff facility, tests
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
549 
diff
changeset
 | 
47 grow(0); | 
| 
288
 
b11f6a08f748
Avoid boxing int values and list resizes on revlog read
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
48 } | 
| 
 
b11f6a08f748
Avoid boxing int values and list resizes on revlog read
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
49 data[count++] = v; | 
| 
 
b11f6a08f748
Avoid boxing int values and list resizes on revlog read
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
50 } | 
| 
 
b11f6a08f748
Avoid boxing int values and list resizes on revlog read
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
51 | 
| 
551
 
4ea0351ca878
Better (precise) name for diff facility, tests
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
549 
diff
changeset
 | 
52 public void add(int... values) { | 
| 
 
4ea0351ca878
Better (precise) name for diff facility, tests
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
549 
diff
changeset
 | 
53 if (count + values.length > data.length) { | 
| 
552
 
45751456b471
Annotate file changes through few revisions, walking either direction (old to new and vice versa)
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
551 
diff
changeset
 | 
54 grow(count + values.length); | 
| 
551
 
4ea0351ca878
Better (precise) name for diff facility, tests
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
549 
diff
changeset
 | 
55 } | 
| 
 
4ea0351ca878
Better (precise) name for diff facility, tests
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
549 
diff
changeset
 | 
56 for (int v : values) { | 
| 
 
4ea0351ca878
Better (precise) name for diff facility, tests
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
549 
diff
changeset
 | 
57 data[count++] = v; | 
| 
 
4ea0351ca878
Better (precise) name for diff facility, tests
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
549 
diff
changeset
 | 
58 } | 
| 
 
4ea0351ca878
Better (precise) name for diff facility, tests
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
549 
diff
changeset
 | 
59 } | 
| 
 
4ea0351ca878
Better (precise) name for diff facility, tests
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
549 
diff
changeset
 | 
60 | 
| 
288
 
b11f6a08f748
Avoid boxing int values and list resizes on revlog read
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
61 public int get(int i) { | 
| 
 
b11f6a08f748
Avoid boxing int values and list resizes on revlog read
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
62 if (i < 0 || i >= count) { | 
| 
 
b11f6a08f748
Avoid boxing int values and list resizes on revlog read
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
63 throw new IndexOutOfBoundsException(String.format("Index: %d, size: %d", i, count)); | 
| 
 
b11f6a08f748
Avoid boxing int values and list resizes on revlog read
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
64 } | 
| 
 
b11f6a08f748
Avoid boxing int values and list resizes on revlog read
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
65 return data[i]; | 
| 
 
b11f6a08f748
Avoid boxing int values and list resizes on revlog read
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
66 } | 
| 
 
b11f6a08f748
Avoid boxing int values and list resizes on revlog read
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
67 | 
| 
545
 
15b406c7cd9d
First round of annotate file is functional
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
329 
diff
changeset
 | 
68 public void set(int i, int v) { | 
| 
 
15b406c7cd9d
First round of annotate file is functional
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
329 
diff
changeset
 | 
69 if (i < 0 || i >= count) { | 
| 
 
15b406c7cd9d
First round of annotate file is functional
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
329 
diff
changeset
 | 
70 throw new IndexOutOfBoundsException(String.format("Index: %d, size: %d", i, count)); | 
| 
 
15b406c7cd9d
First round of annotate file is functional
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
329 
diff
changeset
 | 
71 } | 
| 
 
15b406c7cd9d
First round of annotate file is functional
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
329 
diff
changeset
 | 
72 data[i] = v; | 
| 
 
15b406c7cd9d
First round of annotate file is functional
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
329 
diff
changeset
 | 
73 } | 
| 
 
15b406c7cd9d
First round of annotate file is functional
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
329 
diff
changeset
 | 
74 | 
| 
288
 
b11f6a08f748
Avoid boxing int values and list resizes on revlog read
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
75 public int size() { | 
| 
 
b11f6a08f748
Avoid boxing int values and list resizes on revlog read
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
76 return count; | 
| 
 
b11f6a08f748
Avoid boxing int values and list resizes on revlog read
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
77 } | 
| 
329
 
694ebabb5cb3
Refactor revlog patch mechanism, towards patch merging
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
328 
diff
changeset
 | 
78 | 
| 
545
 
15b406c7cd9d
First round of annotate file is functional
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
329 
diff
changeset
 | 
79 public boolean isEmpty() { | 
| 
 
15b406c7cd9d
First round of annotate file is functional
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
329 
diff
changeset
 | 
80 return count == 0; | 
| 
 
15b406c7cd9d
First round of annotate file is functional
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
329 
diff
changeset
 | 
81 } | 
| 
 
15b406c7cd9d
First round of annotate file is functional
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
329 
diff
changeset
 | 
82 | 
| 
329
 
694ebabb5cb3
Refactor revlog patch mechanism, towards patch merging
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
328 
diff
changeset
 | 
83 public void clear() { | 
| 
 
694ebabb5cb3
Refactor revlog patch mechanism, towards patch merging
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
328 
diff
changeset
 | 
84 count = 0; | 
| 
 
694ebabb5cb3
Refactor revlog patch mechanism, towards patch merging
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
328 
diff
changeset
 | 
85 } | 
| 
 
694ebabb5cb3
Refactor revlog patch mechanism, towards patch merging
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
328 
diff
changeset
 | 
86 | 
| 
573
 
e49f9d9513fa
Partial blame when start/end revisions are in the middle of a single filename history
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
561 
diff
changeset
 | 
87 public void trimTo(int newSize) { | 
| 
 
e49f9d9513fa
Partial blame when start/end revisions are in the middle of a single filename history
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
561 
diff
changeset
 | 
88 if (newSize < 0 || newSize > count) { | 
| 
 
e49f9d9513fa
Partial blame when start/end revisions are in the middle of a single filename history
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
561 
diff
changeset
 | 
89 throw new IllegalArgumentException(String.format("Can't trim vector of size %d to %d", count, newSize)); | 
| 
 
e49f9d9513fa
Partial blame when start/end revisions are in the middle of a single filename history
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
561 
diff
changeset
 | 
90 } | 
| 
 
e49f9d9513fa
Partial blame when start/end revisions are in the middle of a single filename history
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
561 
diff
changeset
 | 
91 count = newSize; | 
| 
 
e49f9d9513fa
Partial blame when start/end revisions are in the middle of a single filename history
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
561 
diff
changeset
 | 
92 } | 
| 
 
e49f9d9513fa
Partial blame when start/end revisions are in the middle of a single filename history
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
561 
diff
changeset
 | 
93 | 
| 
329
 
694ebabb5cb3
Refactor revlog patch mechanism, towards patch merging
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
328 
diff
changeset
 | 
94 public void trimToSize() { | 
| 
 
694ebabb5cb3
Refactor revlog patch mechanism, towards patch merging
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
328 
diff
changeset
 | 
95 data = toArray(true); | 
| 
 
694ebabb5cb3
Refactor revlog patch mechanism, towards patch merging
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
328 
diff
changeset
 | 
96 } | 
| 
 
694ebabb5cb3
Refactor revlog patch mechanism, towards patch merging
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
328 
diff
changeset
 | 
97 | 
| 
288
 
b11f6a08f748
Avoid boxing int values and list resizes on revlog read
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
98 | 
| 
 
b11f6a08f748
Avoid boxing int values and list resizes on revlog read
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
99 public int[] toArray() { | 
| 
 
b11f6a08f748
Avoid boxing int values and list resizes on revlog read
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
100 int[] rv = new int[count]; | 
| 
 
b11f6a08f748
Avoid boxing int values and list resizes on revlog read
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
101 System.arraycopy(data, 0, rv, 0, count); | 
| 
 
b11f6a08f748
Avoid boxing int values and list resizes on revlog read
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
102 return rv; | 
| 
 
b11f6a08f748
Avoid boxing int values and list resizes on revlog read
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
103 } | 
| 
552
 
45751456b471
Annotate file changes through few revisions, walking either direction (old to new and vice versa)
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
551 
diff
changeset
 | 
104 | 
| 
 
45751456b471
Annotate file changes through few revisions, walking either direction (old to new and vice versa)
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
551 
diff
changeset
 | 
105 public void reverse() { | 
| 
 
45751456b471
Annotate file changes through few revisions, walking either direction (old to new and vice versa)
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
551 
diff
changeset
 | 
106 for (int a = 0, b = count-1; a < b; a++, b--) { | 
| 
 
45751456b471
Annotate file changes through few revisions, walking either direction (old to new and vice versa)
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
551 
diff
changeset
 | 
107 int t = data[b]; | 
| 
 
45751456b471
Annotate file changes through few revisions, walking either direction (old to new and vice versa)
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
551 
diff
changeset
 | 
108 data[b] = data[a]; | 
| 
 
45751456b471
Annotate file changes through few revisions, walking either direction (old to new and vice versa)
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
551 
diff
changeset
 | 
109 data[a] = t; | 
| 
 
45751456b471
Annotate file changes through few revisions, walking either direction (old to new and vice versa)
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
551 
diff
changeset
 | 
110 } | 
| 
 
45751456b471
Annotate file changes through few revisions, walking either direction (old to new and vice versa)
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
551 
diff
changeset
 | 
111 } | 
| 
 
45751456b471
Annotate file changes through few revisions, walking either direction (old to new and vice versa)
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
551 
diff
changeset
 | 
112 | 
| 
561
 
d3c71498919c
Do not process child revisions before all possible parent paths were visited
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
552 
diff
changeset
 | 
113 /** | 
| 
 
d3c71498919c
Do not process child revisions before all possible parent paths were visited
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
552 
diff
changeset
 | 
114 * | 
| 
 
d3c71498919c
Do not process child revisions before all possible parent paths were visited
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
552 
diff
changeset
 | 
115 * @param ascending <code>true</code> to sort in ascending order, <code>false</code> for descending | 
| 
 
d3c71498919c
Do not process child revisions before all possible parent paths were visited
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
552 
diff
changeset
 | 
116 */ | 
| 
 
d3c71498919c
Do not process child revisions before all possible parent paths were visited
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
552 
diff
changeset
 | 
117 public void sort(boolean ascending) { | 
| 
 
d3c71498919c
Do not process child revisions before all possible parent paths were visited
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
552 
diff
changeset
 | 
118 Arrays.sort(data, 0, count); | 
| 
 
d3c71498919c
Do not process child revisions before all possible parent paths were visited
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
552 
diff
changeset
 | 
119 if (!ascending) { | 
| 
 
d3c71498919c
Do not process child revisions before all possible parent paths were visited
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
552 
diff
changeset
 | 
120 reverse(); | 
| 
 
d3c71498919c
Do not process child revisions before all possible parent paths were visited
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
552 
diff
changeset
 | 
121 } | 
| 
 
d3c71498919c
Do not process child revisions before all possible parent paths were visited
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
552 
diff
changeset
 | 
122 } | 
| 
 
d3c71498919c
Do not process child revisions before all possible parent paths were visited
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
552 
diff
changeset
 | 
123 | 
| 
 
d3c71498919c
Do not process child revisions before all possible parent paths were visited
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
552 
diff
changeset
 | 
124 | 
| 
552
 
45751456b471
Annotate file changes through few revisions, walking either direction (old to new and vice versa)
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
551 
diff
changeset
 | 
125 @Override | 
| 
 
45751456b471
Annotate file changes through few revisions, walking either direction (old to new and vice versa)
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
551 
diff
changeset
 | 
126 public String toString() { | 
| 
 
45751456b471
Annotate file changes through few revisions, walking either direction (old to new and vice versa)
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
551 
diff
changeset
 | 
127 return String.format("%s[%d]", IntVector.class.getSimpleName(), size()); | 
| 
 
45751456b471
Annotate file changes through few revisions, walking either direction (old to new and vice versa)
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
551 
diff
changeset
 | 
128 } | 
| 
288
 
b11f6a08f748
Avoid boxing int values and list resizes on revlog read
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
129 | 
| 
 
b11f6a08f748
Avoid boxing int values and list resizes on revlog read
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
130 /** | 
| 
 
b11f6a08f748
Avoid boxing int values and list resizes on revlog read
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
131 * Use only when this instance won't be used any longer | 
| 
 
b11f6a08f748
Avoid boxing int values and list resizes on revlog read
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
132 */ | 
| 
 
b11f6a08f748
Avoid boxing int values and list resizes on revlog read
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
133 int[] toArray(boolean internalIfSizeMatchCapacity) { | 
| 
 
b11f6a08f748
Avoid boxing int values and list resizes on revlog read
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
134 if (count == data.length) { | 
| 
 
b11f6a08f748
Avoid boxing int values and list resizes on revlog read
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
135 return data; | 
| 
 
b11f6a08f748
Avoid boxing int values and list resizes on revlog read
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
136 } | 
| 
 
b11f6a08f748
Avoid boxing int values and list resizes on revlog read
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
137 return toArray(); | 
| 
 
b11f6a08f748
Avoid boxing int values and list resizes on revlog read
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
138 } | 
| 
 
b11f6a08f748
Avoid boxing int values and list resizes on revlog read
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
139 | 
| 
551
 
4ea0351ca878
Better (precise) name for diff facility, tests
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
549 
diff
changeset
 | 
140 private void grow(int newCapacityHint) { | 
| 
288
 
b11f6a08f748
Avoid boxing int values and list resizes on revlog read
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
141 if (increment == 0) { | 
| 
329
 
694ebabb5cb3
Refactor revlog patch mechanism, towards patch merging
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
328 
diff
changeset
 | 
142 throw new UnsupportedOperationException("This vector is not allowed to expand"); | 
| 
288
 
b11f6a08f748
Avoid boxing int values and list resizes on revlog read
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
143 } | 
| 
574
 
88afffd39899
Improve memory consumption of HgManifest#getFileRevision(): avoid extra byte[] instances
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
573 
diff
changeset
 | 
144 int newCapacity = increment < 0 ? data.length << 1 : (data.length + increment); | 
| 
551
 
4ea0351ca878
Better (precise) name for diff facility, tests
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
549 
diff
changeset
 | 
145 if (newCapacityHint > 0 && newCapacity < newCapacityHint) { | 
| 
 
4ea0351ca878
Better (precise) name for diff facility, tests
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
549 
diff
changeset
 | 
146 newCapacity = newCapacityHint; | 
| 
 
4ea0351ca878
Better (precise) name for diff facility, tests
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents: 
549 
diff
changeset
 | 
147 } | 
| 
288
 
b11f6a08f748
Avoid boxing int values and list resizes on revlog read
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
148 assert newCapacity > 0 && newCapacity != data.length : newCapacity; | 
| 
 
b11f6a08f748
Avoid boxing int values and list resizes on revlog read
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
149 int[] newData = new int[newCapacity]; | 
| 
 
b11f6a08f748
Avoid boxing int values and list resizes on revlog read
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
150 System.arraycopy(data, 0, newData, 0, count); | 
| 
 
b11f6a08f748
Avoid boxing int values and list resizes on revlog read
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
151 data = newData; | 
| 
 
b11f6a08f748
Avoid boxing int values and list resizes on revlog read
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
152 } | 
| 
 
b11f6a08f748
Avoid boxing int values and list resizes on revlog read
 
Artem Tikhomirov <tikhomirov.artem@gmail.com> 
parents:  
diff
changeset
 | 
153 } | 
