Xinqi Bao's Git

README.md: updated paper url
[XbSlicer.git] / src / BufferReadBinary.cc
1 /*
2 Buffer for reading binary STL file
3 */
4 #include "BufferReadBinary.hh"
5
6 BufferReadBinary::BufferReadBinary(std::string& fileTarget)
7 : remain(0), readIn(0), numTrianglesInBlock(0)
8 {
9 prebuffer = new char[PREBUFFER_SIZE + BUFFER_SIZE];
10 buffer = prebuffer + PREBUFFER_SIZE;
11 fn = open(fileTarget.c_str(), O_RDONLY);
12 readIn = read(fn, buffer, BUFFER_SIZE);
13 phead = buffer + 80;
14 numTrianglesInFile = *(uint32_t*)phead;
15 phead += sizeof(uint32_t);
16 readIn -= 84;
17 numTrianglesInBlock = readIn / 50;
18 remain = readIn % 50;
19 }
20 BufferReadBinary::~BufferReadBinary()
21 {
22 delete[] prebuffer;
23 close(fn);
24 }
25 uint32_t BufferReadBinary::getNumTrianglesInFile()
26 {
27 return numTrianglesInFile;
28 }
29 uint32_t BufferReadBinary::getNumTrianglesInBlock()
30 {
31 return numTrianglesInBlock;
32 }
33 void BufferReadBinary::step2Bytes() { phead += 2; }
34 void BufferReadBinary::stepFloat() { phead += sizeof(float); }
35 float BufferReadBinary::getFloat() { return *(float*)phead; }
36 void BufferReadBinary::readBuffer()
37 {
38 char* pd = buffer - remain;
39 char* pf = buffer + BUFFER_SIZE - remain;
40 for (int i = remain; i > 0; i--, pd++, pf++) *pd = *pf;
41 readIn = read(fn, buffer, BUFFER_SIZE);
42 phead = buffer - remain;
43 numTrianglesInBlock = (readIn + remain) / 50;
44 remain = (readIn + remain) % 50;
45 }