Skip to content

Latest commit

 

History

History
executable file
·
74 lines (66 loc) · 2.11 KB

Merge.cpp

File metadata and controls

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
Aug 25, 2003
Aug 25, 2003
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);
Aug 25, 2003
Aug 25, 2003
28
29
// Create linked list head
this->FirstHunk = new Hunk(FirstHunk);
30
31
// Save the buffer references
this->Buffer[DiffFile_One] = new LineBuffer(Buffer1);
Jul 26, 2003
Jul 26, 2003
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);
}
Aug 25, 2003
Aug 25, 2003
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);
Aug 25, 2003
Aug 25, 2003
51
52
// Return the new transaction object
return NewTransaction;
53
54
}
Jul 26, 2003
Jul 26, 2003
55
56
57
58
59
LineBuffer *Merge::GetBuffer(DiffFileNumber FileNumber)
{
return Buffer[FileNumber];
}
Aug 25, 2003
Aug 25, 2003
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];
Aug 29, 2003
Aug 29, 2003
73
FirstHunk->DeleteList();
74
}