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
;
44 BOUNDARY_C
, // corresponds to MERGE_FORK
45 BOUNDARY_R
, // corresponds to MERGE_FORK_R
46 BOUNDARY_L
, // corresponds to MERGE_FORK_L
53 static inline bool isHead(int x
) { return (x
== HEAD
|| x
== HEAD_R
|| x
== HEAD_L
); }
54 static inline bool isTail(int x
) { return (x
== TAIL
|| x
== TAIL_R
|| x
== TAIL_L
); }
55 static inline bool isJoin(int x
) { return (x
== JOIN
|| x
== JOIN_R
|| x
== JOIN_L
); }
56 static inline bool isFreeLane(int x
) { return (x
== NOT_ACTIVE
|| x
== CROSS
|| isJoin(x
)); }
57 static inline bool isBoundary(int x
) { return (x
== BOUNDARY
|| x
== BOUNDARY_C
||
58 x
== BOUNDARY_R
|| x
== BOUNDARY_L
); }
59 static inline bool isMerge(int x
) { return (x
== MERGE_FORK
|| x
== MERGE_FORK_R
||
60 x
== MERGE_FORK_L
|| isBoundary(x
)); }
61 static inline bool isActive(int x
) { return (x
== ACTIVE
|| x
== INITIAL
|| x
== BRANCH
||
64 Lanes() // init() will setup us later, when data is available
71 bool isEmpty() { return typeVec
.empty(); }
72 void init(const CGitHash
& expectedSha
);
74 bool isFork(const CGitHash
& sha
, bool& isDiscontinuity
);
75 void setBoundary(bool isBoundary
, bool isInitial
);
76 void setFork(const CGitHash
& sha
);
77 void setMerge(const CGitHashList
& parents
);
80 void changeActiveLane(const CGitHash
& sha
);
86 void nextParent(const CGitHash
& sha
);
87 void getLanes(QVector
<int> &ln
) { ln
= typeVec
; } // O(1) vector is implicitly shared
90 int findNextSha(const CGitHash
& next
, int pos
);
91 int findType(int type
, int pos
);
92 int add(int type
, const CGitHash
& next
, int pos
, bool& wasEmptyCross
);
96 QVector
<CGitHash
> nextShaVec
;
98 int NODE
, NODE_L
, NODE_R
;