Mercurial > hg4j
comparison src/org/tmatesoft/hg/internal/Patch.java @ 587:a52f4cc56f9c
Minimize vectors re-allocating when merging patches
| author | Artem Tikhomirov <tikhomirov.artem@gmail.com> |
|---|---|
| date | Fri, 26 Apr 2013 20:04:17 +0200 |
| parents | ed243b668502 |
| children | 7c0d2ce340b8 |
comparison
equal
deleted
inserted
replaced
| 586:73c20c648c1f | 587:a52f4cc56f9c |
|---|---|
| 66 Patch r = p1.apply(p2); | 66 Patch r = p1.apply(p2); |
| 67 System.out.println("r: " + r); | 67 System.out.println("r: " + r); |
| 68 } | 68 } |
| 69 | 69 |
| 70 public Patch() { | 70 public Patch() { |
| 71 this(false); | 71 this(16, false); |
| 72 } | 72 } |
| 73 | 73 |
| 74 public Patch(boolean normalizeOnChange) { | 74 public Patch(boolean normalizeOnChange) { |
| 75 this(16, normalizeOnChange); | |
| 76 } | |
| 77 | |
| 78 public Patch(int sizeHint, boolean normalizeOnChange) { | |
| 75 shallNormalize = normalizeOnChange; | 79 shallNormalize = normalizeOnChange; |
| 76 starts = new IntVector(); | 80 starts = new IntVector(sizeHint, -1); |
| 77 ends = new IntVector(); | 81 ends = new IntVector(sizeHint, -1); |
| 78 data = new ArrayList<byte[]>(); | 82 data = new ArrayList<byte[]>(sizeHint); |
| 79 } | 83 } |
| 80 | 84 |
| 81 public String toString() { | 85 public String toString() { |
| 82 StringBuilder sb = new StringBuilder(); | 86 StringBuilder sb = new StringBuilder(); |
| 83 Formatter f = new Formatter(sb); | 87 Formatter f = new Formatter(sb); |
| 225 | 229 |
| 226 /** | 230 /** |
| 227 * Modify this patch with subsequent patch | 231 * Modify this patch with subsequent patch |
| 228 */ | 232 */ |
| 229 public /*SHALL BE PUBLIC ONCE TESTING ENDS*/ Patch apply(Patch another) { | 233 public /*SHALL BE PUBLIC ONCE TESTING ENDS*/ Patch apply(Patch another) { |
| 230 Patch r = new Patch(shallNormalize); | 234 Patch r = new Patch(count() + another.count() * 2, shallNormalize); |
| 231 int p1TotalAppliedDelta = 0; // value to add to start and end indexes of the older patch to get their values as if | 235 int p1TotalAppliedDelta = 0; // value to add to start and end indexes of the older patch to get their values as if |
| 232 // in the patched text, iow, directly comparable with respective indexes from the newer patch. | 236 // in the patched text, iow, directly comparable with respective indexes from the newer patch. |
| 233 int p1EntryStart = 0, p1EntryEnd = 0, p1EntryLen = 0; | 237 int p1EntryStart = 0, p1EntryEnd = 0, p1EntryLen = 0; |
| 234 byte[] p1Data = null; | 238 byte[] p1Data = null; |
| 235 boolean insideP1entry = false; | 239 boolean insideP1entry = false; |
