-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathGracefulRenderer.cpp
34 lines (31 loc) · 979 Bytes
/
GracefulRenderer.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
#include "GracefulRenderer.h"
#include "utils.h"
GracefulRenderer::GracefulRenderer (RowSize recordSize, SortedRecordRenderer * inMemoryRenderer, ExternalRun * externalRun, bool removeDuplicates) :
SortedRecordRenderer(recordSize, 1, 0, removeDuplicates),
externalRun(externalRun),
inMemoryRenderer(inMemoryRenderer)
{
TRACE (false);
vector<byte *> formingRows;
formingRows.push_back(inMemoryRenderer->next());
formingRows.push_back(externalRun->next());
tree = new TournamentTree(formingRows, recordSize);
}
GracefulRenderer::~GracefulRenderer ()
{
TRACE (false);
delete externalRun;
delete inMemoryRenderer;
delete tree;
}
byte * GracefulRenderer::next ()
{
return SortedRecordRenderer::renderRow(
[this] () -> byte * {
auto bufferNum = tree->peekTopBuffer();
if (bufferNum == 0) return inMemoryRenderer->next();
else return externalRun->next();
},
tree
);
}