/
Merge.cpp
executable file
·74 lines (66 loc) · 2.11 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
/* Merge.cpp - Implementation of the Merge class
*
*/
#include "Merge.h"
#include "FileMergeTransaction.h"
#include "Config.h"
#include <assert.h>
using namespace MojoMerge;
Merge::Merge(Hunk *FirstHunk, const char *Buffer1, const char *Buffer2,
const char *Buffer3)
{
// Initialize members
16
// First hunk is a dummy hunk list head
17
18
19
20
21
22
23
24
25
26
27
this->FirstHunk = NULL;
this->Buffer[DiffFile_One] = NULL;
this->Buffer[DiffFile_Two] = NULL;
this->Buffer[DiffFile_Three]= NULL;
UndoBuffer = NULL;
// The FirstHunk can't be NULL
assert(FirstHunk);
// The first two buffers can't be NULL either
assert(Buffer1);
assert(Buffer2);
28
29
// Create linked list head
this->FirstHunk = new Hunk(FirstHunk);
30
31
// Save the buffer references
this->Buffer[DiffFile_One] = new LineBuffer(Buffer1);
32
this->Buffer[DiffFile_Two] = new LineBuffer(Buffer2);
33
34
35
36
37
38
39
40
if(Buffer3)
this->Buffer[DiffFile_Three] = new LineBuffer(Buffer3);
// Create the undo buffer (get size from config settings)
UndoBuffer = new TransactionBuffer(Config::GetUndoSize());
// UndoBuffer can't be NULL
assert(UndoBuffer);
}
41
42
FileMergeTransaction *Merge::ResolveDiff(Hunk *MergeHunk,
DiffFileNumber SourceFileNumber, DiffFileNumber DestFileNumber)
43
44
45
46
47
48
49
50
{
// Create new merge transaction that will perform the resolve. This also
// executes the transaction
FileMergeTransaction *NewTransaction = new FileMergeTransaction(MergeHunk,
Buffer[SourceFileNumber], Buffer[DestFileNumber], SourceFileNumber,
DestFileNumber);
// Add the transaction to the undo buffer
UndoBuffer->PushTransaction(NewTransaction);
51
52
// Return the new transaction object
return NewTransaction;
53
54
}
55
56
57
58
59
LineBuffer *Merge::GetBuffer(DiffFileNumber FileNumber)
{
return Buffer[FileNumber];
}
60
61
62
63
64
65
Hunk *Merge::GetFirstHunk()
{
// First hunk is always a dummy "list head"
return FirstHunk->GetNextHunk();
}
66
67
68
69
70
71
72
Merge::~Merge()
{
// Deallocate the objects we created
delete UndoBuffer;
delete Buffer[DiffFile_One];
delete Buffer[DiffFile_Two];
delete Buffer[DiffFile_Three];
73
FirstHunk->DeleteList();
74
}