Mercurial > jhg
annotate src/org/tmatesoft/hg/repo/HgRevisionMap.java @ 713:661e77dc88ba tip
Mac support: respect Mac alternatives of command-line arguments for common unix tools
| author | Artem Tikhomirov <tikhomirov.artem@gmail.com> | 
|---|---|
| date | Sun, 03 Aug 2014 18:09:00 +0200 | 
| parents | 6334b0267103 | 
| children | 
| rev | line source | 
|---|---|
| 433 
be697c3e951e
Revlog.RevisionMap helper class got promoted as TLC, renamed to HgRevisionMap
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 1 /* | 
| 
be697c3e951e
Revlog.RevisionMap helper class got promoted as TLC, renamed to HgRevisionMap
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 2 * Copyright (c) 2011-2012 TMate Software Ltd | 
| 
be697c3e951e
Revlog.RevisionMap helper class got promoted as TLC, renamed to HgRevisionMap
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 3 * | 
| 
be697c3e951e
Revlog.RevisionMap helper class got promoted as TLC, renamed to HgRevisionMap
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 4 * This program is free software; you can redistribute it and/or modify | 
| 
be697c3e951e
Revlog.RevisionMap helper class got promoted as TLC, renamed to HgRevisionMap
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 5 * it under the terms of the GNU General Public License as published by | 
| 
be697c3e951e
Revlog.RevisionMap helper class got promoted as TLC, renamed to HgRevisionMap
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 6 * the Free Software Foundation; version 2 of the License. | 
| 
be697c3e951e
Revlog.RevisionMap helper class got promoted as TLC, renamed to HgRevisionMap
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 7 * | 
| 
be697c3e951e
Revlog.RevisionMap helper class got promoted as TLC, renamed to HgRevisionMap
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 8 * This program is distributed in the hope that it will be useful, | 
| 
be697c3e951e
Revlog.RevisionMap helper class got promoted as TLC, renamed to HgRevisionMap
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 9 * but WITHOUT ANY WARRANTY; without even the implied warranty of | 
| 
be697c3e951e
Revlog.RevisionMap helper class got promoted as TLC, renamed to HgRevisionMap
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | 
| 
be697c3e951e
Revlog.RevisionMap helper class got promoted as TLC, renamed to HgRevisionMap
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 11 * GNU General Public License for more details. | 
| 
be697c3e951e
Revlog.RevisionMap helper class got promoted as TLC, renamed to HgRevisionMap
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 12 * | 
| 
be697c3e951e
Revlog.RevisionMap helper class got promoted as TLC, renamed to HgRevisionMap
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 13 * For information on how to redistribute this software under | 
| 
be697c3e951e
Revlog.RevisionMap helper class got promoted as TLC, renamed to HgRevisionMap
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 14 * the terms of a license other than GNU General Public License | 
| 
be697c3e951e
Revlog.RevisionMap helper class got promoted as TLC, renamed to HgRevisionMap
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 15 * contact TMate Software at support@hg4j.com | 
| 
be697c3e951e
Revlog.RevisionMap helper class got promoted as TLC, renamed to HgRevisionMap
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 16 */ | 
| 
be697c3e951e
Revlog.RevisionMap helper class got promoted as TLC, renamed to HgRevisionMap
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 17 package org.tmatesoft.hg.repo; | 
| 
be697c3e951e
Revlog.RevisionMap helper class got promoted as TLC, renamed to HgRevisionMap
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 18 | 
| 
be697c3e951e
Revlog.RevisionMap helper class got promoted as TLC, renamed to HgRevisionMap
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 19 import static org.tmatesoft.hg.repo.HgRepository.BAD_REVISION; | 
| 
be697c3e951e
Revlog.RevisionMap helper class got promoted as TLC, renamed to HgRevisionMap
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 20 import static org.tmatesoft.hg.repo.HgRepository.TIP; | 
| 
be697c3e951e
Revlog.RevisionMap helper class got promoted as TLC, renamed to HgRevisionMap
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 21 | 
| 
be697c3e951e
Revlog.RevisionMap helper class got promoted as TLC, renamed to HgRevisionMap
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 22 import org.tmatesoft.hg.core.Nodeid; | 
| 
be697c3e951e
Revlog.RevisionMap helper class got promoted as TLC, renamed to HgRevisionMap
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 23 import org.tmatesoft.hg.internal.ArrayHelper; | 
| 
be697c3e951e
Revlog.RevisionMap helper class got promoted as TLC, renamed to HgRevisionMap
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 24 import org.tmatesoft.hg.repo.Revlog.RevisionInspector; | 
| 
be697c3e951e
Revlog.RevisionMap helper class got promoted as TLC, renamed to HgRevisionMap
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 25 | 
| 
be697c3e951e
Revlog.RevisionMap helper class got promoted as TLC, renamed to HgRevisionMap
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 26 /** | 
| 
be697c3e951e
Revlog.RevisionMap helper class got promoted as TLC, renamed to HgRevisionMap
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 27 * Effective int to Nodeid and vice versa translation. It's advised to use this class instead of | 
| 
be697c3e951e
Revlog.RevisionMap helper class got promoted as TLC, renamed to HgRevisionMap
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 28 * multiple {@link Revlog#getRevisionIndex(Nodeid)} calls. Rule of thumb is 20+ calls (given | 
| 
be697c3e951e
Revlog.RevisionMap helper class got promoted as TLC, renamed to HgRevisionMap
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 29 * initialization costs). It's also important to take into account memory consumption, for huge | 
| 
be697c3e951e
Revlog.RevisionMap helper class got promoted as TLC, renamed to HgRevisionMap
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 30 * repositories use of this class may pay off only when accessing greatest fraction of all revisions. | 
| 
be697c3e951e
Revlog.RevisionMap helper class got promoted as TLC, renamed to HgRevisionMap
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 31 * | 
| 
be697c3e951e
Revlog.RevisionMap helper class got promoted as TLC, renamed to HgRevisionMap
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 32 * <p>Next code snippet shows instantiation and sample use: | 
| 
be697c3e951e
Revlog.RevisionMap helper class got promoted as TLC, renamed to HgRevisionMap
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 33 * <pre> | 
| 
be697c3e951e
Revlog.RevisionMap helper class got promoted as TLC, renamed to HgRevisionMap
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 34 * RevisionMap<HgChangelog> clogMap = new RevisionMap<HgChangelog>(clog).init(); | 
| 
be697c3e951e
Revlog.RevisionMap helper class got promoted as TLC, renamed to HgRevisionMap
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 35 * RevisionMap<HgDataFile> fileMap = new RevisionMap<HgDataFile>(fileNode).init(); | 
| 
be697c3e951e
Revlog.RevisionMap helper class got promoted as TLC, renamed to HgRevisionMap
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 36 * | 
| 
be697c3e951e
Revlog.RevisionMap helper class got promoted as TLC, renamed to HgRevisionMap
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 37 * int fileRevIndex = 0; | 
| 
be697c3e951e
Revlog.RevisionMap helper class got promoted as TLC, renamed to HgRevisionMap
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 38 * Nodeid fileRev = fileMap.revision(fileRevIndex); | 
| 
be697c3e951e
Revlog.RevisionMap helper class got promoted as TLC, renamed to HgRevisionMap
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 39 * int csetRevIndex = fileNode.getChangesetRevisionIndex(fileRevIndex); | 
| 
be697c3e951e
Revlog.RevisionMap helper class got promoted as TLC, renamed to HgRevisionMap
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 40 * Nodeid csetRev = clogMap.revision(localCset); | 
| 
be697c3e951e
Revlog.RevisionMap helper class got promoted as TLC, renamed to HgRevisionMap
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 41 * changesetToNodeidMap.put(csetRev, fileRev); | 
| 
be697c3e951e
Revlog.RevisionMap helper class got promoted as TLC, renamed to HgRevisionMap
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 42 * </pre> | 
| 
be697c3e951e
Revlog.RevisionMap helper class got promoted as TLC, renamed to HgRevisionMap
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 43 * | 
| 
be697c3e951e
Revlog.RevisionMap helper class got promoted as TLC, renamed to HgRevisionMap
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 44 * <p> | 
| 
be697c3e951e
Revlog.RevisionMap helper class got promoted as TLC, renamed to HgRevisionMap
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 45 * {@link Revlog#getRevisionIndex(Nodeid)} with straightforward lookup approach performs O(n/2) | 
| 
be697c3e951e
Revlog.RevisionMap helper class got promoted as TLC, renamed to HgRevisionMap
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 46 * <p> | 
| 
be697c3e951e
Revlog.RevisionMap helper class got promoted as TLC, renamed to HgRevisionMap
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 47 * {@link HgRevisionMap#revisionIndex(Nodeid)} is log(n), plus initialization is O(n) (just once). | 
| 
be697c3e951e
Revlog.RevisionMap helper class got promoted as TLC, renamed to HgRevisionMap
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 48 * | 
| 
be697c3e951e
Revlog.RevisionMap helper class got promoted as TLC, renamed to HgRevisionMap
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 49 * @see HgParentChildMap | 
| 
be697c3e951e
Revlog.RevisionMap helper class got promoted as TLC, renamed to HgRevisionMap
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 50 * | 
| 
be697c3e951e
Revlog.RevisionMap helper class got promoted as TLC, renamed to HgRevisionMap
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 51 * @author Artem Tikhomirov | 
| 
be697c3e951e
Revlog.RevisionMap helper class got promoted as TLC, renamed to HgRevisionMap
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 52 * @author TMate Software Ltd. | 
| 
be697c3e951e
Revlog.RevisionMap helper class got promoted as TLC, renamed to HgRevisionMap
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 53 */ | 
| 
be697c3e951e
Revlog.RevisionMap helper class got promoted as TLC, renamed to HgRevisionMap
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 54 public final class HgRevisionMap<T extends Revlog> implements RevisionInspector { | 
| 
be697c3e951e
Revlog.RevisionMap helper class got promoted as TLC, renamed to HgRevisionMap
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 55 /* | 
| 
be697c3e951e
Revlog.RevisionMap helper class got promoted as TLC, renamed to HgRevisionMap
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 56 * in fact, initialization is much slower as it instantiates Nodeids, while #getRevisionIndex | 
| 
be697c3e951e
Revlog.RevisionMap helper class got promoted as TLC, renamed to HgRevisionMap
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 57 * compares directly against byte buffer. Measuring cpython with 70k+ gives 3 times difference (47 vs 171) | 
| 
be697c3e951e
Revlog.RevisionMap helper class got promoted as TLC, renamed to HgRevisionMap
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 58 * for complete changelog iteration. | 
| 
be697c3e951e
Revlog.RevisionMap helper class got promoted as TLC, renamed to HgRevisionMap
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 59 */ | 
| 
be697c3e951e
Revlog.RevisionMap helper class got promoted as TLC, renamed to HgRevisionMap
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 60 | 
| 657 
6334b0267103
ParentChildMap can supply RevisionMap. Refactor ArrayHelper to keep most of sorted/reverse index magic inside
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
628diff
changeset | 61 private final T revlog; | 
| 433 
be697c3e951e
Revlog.RevisionMap helper class got promoted as TLC, renamed to HgRevisionMap
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 62 /* | 
| 
be697c3e951e
Revlog.RevisionMap helper class got promoted as TLC, renamed to HgRevisionMap
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 63 * XXX 3 * (x * 4) bytes. Can I do better? | 
| 
be697c3e951e
Revlog.RevisionMap helper class got promoted as TLC, renamed to HgRevisionMap
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 64 * It seems, yes. Don't need to keep sorted, always can emulate it with indirect access to sequential through sorted2natural. | 
| 
be697c3e951e
Revlog.RevisionMap helper class got promoted as TLC, renamed to HgRevisionMap
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 65 * i.e. instead sorted[mid].compareTo(toFind), do sequential[sorted2natural[mid]].compareTo(toFind) | 
| 
be697c3e951e
Revlog.RevisionMap helper class got promoted as TLC, renamed to HgRevisionMap
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 66 */ | 
| 657 
6334b0267103
ParentChildMap can supply RevisionMap. Refactor ArrayHelper to keep most of sorted/reverse index magic inside
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
628diff
changeset | 67 private Nodeid[] sequential; // natural repository order | 
| 
6334b0267103
ParentChildMap can supply RevisionMap. Refactor ArrayHelper to keep most of sorted/reverse index magic inside
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
628diff
changeset | 68 private ArrayHelper<Nodeid> seqWrapper; | 
| 433 
be697c3e951e
Revlog.RevisionMap helper class got promoted as TLC, renamed to HgRevisionMap
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 69 | 
| 
be697c3e951e
Revlog.RevisionMap helper class got promoted as TLC, renamed to HgRevisionMap
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 70 public HgRevisionMap(T owner) { | 
| 
be697c3e951e
Revlog.RevisionMap helper class got promoted as TLC, renamed to HgRevisionMap
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 71 revlog = owner; | 
| 
be697c3e951e
Revlog.RevisionMap helper class got promoted as TLC, renamed to HgRevisionMap
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 72 } | 
| 
be697c3e951e
Revlog.RevisionMap helper class got promoted as TLC, renamed to HgRevisionMap
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 73 | 
| 
be697c3e951e
Revlog.RevisionMap helper class got promoted as TLC, renamed to HgRevisionMap
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 74 public HgRepository getRepo() { | 
| 
be697c3e951e
Revlog.RevisionMap helper class got promoted as TLC, renamed to HgRevisionMap
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 75 return revlog.getRepo(); | 
| 
be697c3e951e
Revlog.RevisionMap helper class got promoted as TLC, renamed to HgRevisionMap
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 76 } | 
| 
be697c3e951e
Revlog.RevisionMap helper class got promoted as TLC, renamed to HgRevisionMap
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 77 | 
| 
be697c3e951e
Revlog.RevisionMap helper class got promoted as TLC, renamed to HgRevisionMap
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 78 public void next(int revisionIndex, Nodeid revision, int linkedRevision) { | 
| 657 
6334b0267103
ParentChildMap can supply RevisionMap. Refactor ArrayHelper to keep most of sorted/reverse index magic inside
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
628diff
changeset | 79 sequential[revisionIndex] = revision; | 
| 433 
be697c3e951e
Revlog.RevisionMap helper class got promoted as TLC, renamed to HgRevisionMap
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 80 } | 
| 
be697c3e951e
Revlog.RevisionMap helper class got promoted as TLC, renamed to HgRevisionMap
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 81 | 
| 
be697c3e951e
Revlog.RevisionMap helper class got promoted as TLC, renamed to HgRevisionMap
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 82 /** | 
| 
be697c3e951e
Revlog.RevisionMap helper class got promoted as TLC, renamed to HgRevisionMap
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 83 * @return <code>this</code> for convenience. | 
| 
be697c3e951e
Revlog.RevisionMap helper class got promoted as TLC, renamed to HgRevisionMap
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 84 */ | 
| 628 
6526d8adbc0f
Explicit HgRuntimeException to facilitate easy switch from runtime to checked exceptions
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
433diff
changeset | 85 public HgRevisionMap<T> init(/*XXX Pool<Nodeid> to reuse nodeids, if possible. */) throws HgRuntimeException { | 
| 433 
be697c3e951e
Revlog.RevisionMap helper class got promoted as TLC, renamed to HgRevisionMap
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 86 // XXX HgRepository.register((RepoChangeListener) this); // listen to changes in repo, re-init if needed? | 
| 
be697c3e951e
Revlog.RevisionMap helper class got promoted as TLC, renamed to HgRevisionMap
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 87 final int revisionCount = revlog.getRevisionCount(); | 
| 
be697c3e951e
Revlog.RevisionMap helper class got promoted as TLC, renamed to HgRevisionMap
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 88 sequential = new Nodeid[revisionCount]; | 
| 
be697c3e951e
Revlog.RevisionMap helper class got promoted as TLC, renamed to HgRevisionMap
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 89 revlog.indexWalk(0, TIP, this); | 
| 
be697c3e951e
Revlog.RevisionMap helper class got promoted as TLC, renamed to HgRevisionMap
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 90 // next is alternative to Arrays.sort(sorted), and build sorted2natural looking up each element of sequential in sorted. | 
| 
be697c3e951e
Revlog.RevisionMap helper class got promoted as TLC, renamed to HgRevisionMap
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 91 // the way sorted2natural was build is O(n*log n). | 
| 657 
6334b0267103
ParentChildMap can supply RevisionMap. Refactor ArrayHelper to keep most of sorted/reverse index magic inside
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
628diff
changeset | 92 seqWrapper = new ArrayHelper<Nodeid>(sequential); | 
| 
6334b0267103
ParentChildMap can supply RevisionMap. Refactor ArrayHelper to keep most of sorted/reverse index magic inside
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
628diff
changeset | 93 seqWrapper.sort(null, true, false); | 
| 433 
be697c3e951e
Revlog.RevisionMap helper class got promoted as TLC, renamed to HgRevisionMap
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 94 return this; | 
| 
be697c3e951e
Revlog.RevisionMap helper class got promoted as TLC, renamed to HgRevisionMap
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 95 } | 
| 657 
6334b0267103
ParentChildMap can supply RevisionMap. Refactor ArrayHelper to keep most of sorted/reverse index magic inside
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
628diff
changeset | 96 | 
| 
6334b0267103
ParentChildMap can supply RevisionMap. Refactor ArrayHelper to keep most of sorted/reverse index magic inside
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
628diff
changeset | 97 /* friendly initializer to use from HgParentChildMap | 
| 
6334b0267103
ParentChildMap can supply RevisionMap. Refactor ArrayHelper to keep most of sorted/reverse index magic inside
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
628diff
changeset | 98 /*package*/ void init(ArrayHelper<Nodeid> _seqWrapper) { | 
| 
6334b0267103
ParentChildMap can supply RevisionMap. Refactor ArrayHelper to keep most of sorted/reverse index magic inside
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
628diff
changeset | 99 assert _seqWrapper.getData().length == revlog.getRevisionCount(); | 
| 
6334b0267103
ParentChildMap can supply RevisionMap. Refactor ArrayHelper to keep most of sorted/reverse index magic inside
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
628diff
changeset | 100 sequential = _seqWrapper.getData(); | 
| 
6334b0267103
ParentChildMap can supply RevisionMap. Refactor ArrayHelper to keep most of sorted/reverse index magic inside
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
628diff
changeset | 101 seqWrapper = _seqWrapper; | 
| 
6334b0267103
ParentChildMap can supply RevisionMap. Refactor ArrayHelper to keep most of sorted/reverse index magic inside
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
628diff
changeset | 102 } | 
| 433 
be697c3e951e
Revlog.RevisionMap helper class got promoted as TLC, renamed to HgRevisionMap
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 103 | 
| 
be697c3e951e
Revlog.RevisionMap helper class got promoted as TLC, renamed to HgRevisionMap
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 104 public Nodeid revision(int revisionIndex) { | 
| 
be697c3e951e
Revlog.RevisionMap helper class got promoted as TLC, renamed to HgRevisionMap
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 105 return sequential[revisionIndex]; | 
| 
be697c3e951e
Revlog.RevisionMap helper class got promoted as TLC, renamed to HgRevisionMap
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 106 } | 
| 657 
6334b0267103
ParentChildMap can supply RevisionMap. Refactor ArrayHelper to keep most of sorted/reverse index magic inside
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
628diff
changeset | 107 | 
| 433 
be697c3e951e
Revlog.RevisionMap helper class got promoted as TLC, renamed to HgRevisionMap
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 108 public int revisionIndex(Nodeid revision) { | 
| 
be697c3e951e
Revlog.RevisionMap helper class got promoted as TLC, renamed to HgRevisionMap
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 109 if (revision == null || revision.isNull()) { | 
| 
be697c3e951e
Revlog.RevisionMap helper class got promoted as TLC, renamed to HgRevisionMap
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 110 return BAD_REVISION; | 
| 
be697c3e951e
Revlog.RevisionMap helper class got promoted as TLC, renamed to HgRevisionMap
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 111 } | 
| 657 
6334b0267103
ParentChildMap can supply RevisionMap. Refactor ArrayHelper to keep most of sorted/reverse index magic inside
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
628diff
changeset | 112 return seqWrapper.binarySearch(revision, BAD_REVISION); | 
| 433 
be697c3e951e
Revlog.RevisionMap helper class got promoted as TLC, renamed to HgRevisionMap
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 113 } | 
| 
be697c3e951e
Revlog.RevisionMap helper class got promoted as TLC, renamed to HgRevisionMap
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 114 } | 
