2 Author: Marco Costalba (C) 2005-2007
3 Author: TortoiseGit (C) 2008-2013, 2017
5 Copyright: See COPYING file that comes with this distribution
13 #define QVector std::vector
15 typedef std::vector
<CGitHash
> CGitHashList
;
43 BOUNDARY_C
, // corresponds to MERGE_FORK
44 BOUNDARY_R
, // corresponds to MERGE_FORK_R
45 BOUNDARY_L
, // corresponds to MERGE_FORK_L
52 static inline bool isHead(int x
) { return (x
== HEAD
|| x
== HEAD_R
|| x
== HEAD_L
); }
53 static inline bool isTail(int x
) { return (x
== TAIL
|| x
== TAIL_R
|| x
== TAIL_L
); }
54 static inline bool isJoin(int x
) { return (x
== JOIN
|| x
== JOIN_R
|| x
== JOIN_L
); }
55 static inline bool isFreeLane(int x
) { return (x
== NOT_ACTIVE
|| x
== CROSS
|| isJoin(x
)); }
56 static inline bool isBoundary(int x
) { return (x
== BOUNDARY
|| x
== BOUNDARY_C
||
57 x
== BOUNDARY_R
|| x
== BOUNDARY_L
); }
58 static inline bool isMerge(int x
) { return (x
== MERGE_FORK
|| x
== MERGE_FORK_R
||
59 x
== MERGE_FORK_L
|| isBoundary(x
)); }
60 static inline bool isActive(int x
) { return (x
== ACTIVE
|| x
== INITIAL
|| x
== BRANCH
||
63 Lanes() // init() will setup us later, when data is available
70 bool isEmpty() { return typeVec
.empty(); }
71 void init(const CGitHash
& expectedSha
);
73 bool isFork(const CGitHash
& sha
, bool& isDiscontinuity
);
74 void setBoundary(bool isBoundary
);
75 void setFork(const CGitHash
& sha
);
76 void setMerge(const CGitHashList
& parents
);
79 void changeActiveLane(const CGitHash
& sha
);
85 void nextParent(const CGitHash
& sha
);
86 void getLanes(QVector
<int> &ln
) { ln
= typeVec
; } // O(1) vector is implicitly shared
89 int findNextSha(const CGitHash
& next
, int pos
);
90 int findType(int type
, int pos
);
91 int add(int type
, const CGitHash
& next
, int pos
, bool& wasEmptyCross
);
95 QVector
<CGitHash
> nextShaVec
;
97 int NODE
, NODE_L
, NODE_R
;