Program Listing for File FrameMemory.h

Return to documentation for file (lib/DataStructures/FrameMemory.h)

#pragma once
#include <unordered_map>
#include <vector>
#include <boost/thread/mutex.hpp>
#include <deque>
#include <list>
#include <boost/thread/shared_mutex.hpp>


namespace lsd_slam
{

class Frame;
class FrameMemory
{
public:
    static FrameMemory& getInstance();

    float* getFloatBuffer(unsigned int size);

    void* getBuffer(unsigned int sizeInByte);

    void returnBuffer(void* buffer);


    boost::shared_lock<boost::shared_mutex> activateFrame(Frame* frame);
    void deactivateFrame(Frame* frame);
    void pruneActiveFrames();

    void releaseBuffers();
private:
    FrameMemory();
    void* allocateBuffer(unsigned int sizeInByte);

    boost::mutex accessMutex;
    std::unordered_map< void*, unsigned int > bufferSizes;
    std::unordered_map< unsigned int, std::vector< void* > > availableBuffers;

    boost::mutex activeFramesMutex;
    std::list<Frame*> activeFrames;
};

}