Program Listing for File NodeData.hpp
↰ Return to documentation for file (include/lvr2/reconstruction/NodeData.hpp)
/*
* NodeData.hpp
*
* Created on: Dec 11, 2015
* Author: Isaak Mitschke
*/
#ifndef LAS_VEGAS_NODEDATA_H
#define LAS_VEGAS_NODEDATA_H
#include <boost/timer/timer.hpp>
#include <ctime>
#include <fstream>
#include <iostream>
#include <string>
#include <vector>
namespace lvr2
{
template <typename BaseVecT>
class NodeData
{
static boost::timer::cpu_timer itimer;
static boost::timer::cpu_timer otimer;
static bool timer_init;
// Iterator
class Iterator;
public:
NodeData(size_t bufferSize);
NodeData(NodeData& origin);
NodeData& operator=(NodeData& origin);
void open(std::string path);
const std::string& getDataPath() const { return m_dataPath; }
const std::string getFolder() const { return std::to_string(c_tstamp).insert(0, "node-"); }
Iterator begin();
Iterator end();
void remove();
void remove(unsigned int i);
void add(BaseVecT input);
void addNormal(BaseVecT input);
void addBuffered(BaseVecT input);
void addBufferedNormal(BaseVecT input);
void writeBuffer();
size_t getMaxWriteBufferSize();
BaseVecT get(int);
BaseVecT getNormal(int);
BaseVecT next();
size_t size();
size_t getBufferSize();
static void printTimer()
{
std::cout << "IO-Timer of Octree:" << std::endl
<< "READ: " << itimer.format() << std::endl
<< "WRITE: " << otimer.format() << std::endl;
}
private:
// copys the data from origin to this
void copy(NodeData& origin);
// fills the buffer, copys from start_id to buffersize elements into buffer
void fillBuffer(size_t start_id);
void fillBufferNormal(size_t start_id);
// path to data
string m_dataPath;
string m_dataPathNormal;
// if m_gotSize is set, the m_size will be used, else the size will be calculated
bool m_gotSize;
// amount of points stored in data
size_t m_size;
// current id of the dataobject, used to generate file name
int m_id;
// input buffer
std::vector<float> m_readBuffer;
// output buffer
std::vector<float> m_writeBuffer;
std::vector<float> m_readBufferNormal;
// output buffer
std::vector<float> m_writeBufferNormal;
// maximum buffer size
size_t m_bufferSize;
// current inputbuffer position
size_t m_readBufferIndex;
size_t m_readBufferIndexNormal;
// last id
static int c_last_id;
// timestamp, of first creation
static time_t c_tstamp;
};
template <typename BaseVecT>
class NodeData<BaseVecT>::Iterator
{
public:
Iterator(NodeData& nodeData, size_t pos) : m_NodeData(nodeData), m_pos(pos) {}
Iterator(NodeData& nodeData) : m_NodeData(nodeData), m_pos(0) {}
Iterator(const Iterator& copy) : m_pos(copy.m_pos), m_NodeData(copy.m_NodeData) {}
Iterator operator++(int)
{
Iterator tmp(*this);
operator++();
return tmp;
}
bool operator==(const Iterator& rhs) { return m_pos == rhs.m_pos; }
bool operator!=(const Iterator& rhs) { return m_pos != rhs.m_pos; }
// Todo: more if needed
void operator+(int i) { m_pos += i; }
void operator-(int i) { m_pos -= i; }
void operator++() { ++m_pos; }
void operator--() { --m_pos; }
BaseVecT operator*() { return m_NodeData.get(m_pos); }
BaseVecT operator->() { return m_NodeData.get(m_pos); }
private:
NodeData<BaseVecT>& m_NodeData;
size_t m_pos;
};
} // namespace lvr2
#include "NodeData.tcc"
#endif // LAS_VEGAS_NODEDATA_H