Program Listing for File time_surface.h

Return to documentation for file (include/cpphots/interfaces/time_surface.h)

#ifndef CPPHOTS_INTERFACES_TIME_SURFACE_H
#define CPPHOTS_INTERFACES_TIME_SURFACE_H

#include <ostream>
#include <istream>
#include <memory>

#include "../types.h"
#include "streamable.h"
#include "clonable.h"


namespace cpphots {

namespace interfaces {

class TimeSurfaceCalculator : public virtual interfaces::Streamable, public ClonableBase<TimeSurfaceCalculator> {

public:

    virtual ~TimeSurfaceCalculator() {}

    virtual void update(uint64_t t, uint16_t x, uint16_t y) = 0;

    virtual void update(const event& ev) = 0;

    virtual std::pair<TimeSurfaceType, bool> compute(uint64_t t, uint16_t x, uint16_t y) const = 0;

    virtual std::pair<TimeSurfaceType, bool> compute(const event& ev) const = 0;

    virtual std::pair<TimeSurfaceType, bool> updateAndCompute(uint64_t t, uint16_t x, uint16_t y) = 0;

    virtual std::pair<TimeSurfaceType, bool> updateAndCompute(const event& ev) = 0;

    virtual const TimeSurfaceType& getFullContext() const = 0;

    virtual TimeSurfaceType getContext() const = 0;

    virtual TimeSurfaceType sampleContext(uint64_t t) const = 0;

    virtual void reset() = 0;

    virtual std::pair<uint16_t, uint16_t> getSize() const = 0;

    virtual uint16_t getWx() const = 0;

    virtual uint16_t getWy() const = 0;

};

}

using TimeSurfacePtr = interfaces::TimeSurfaceCalculator*;


namespace interfaces {

class TimeSurfacePoolCalculator : public virtual interfaces::Streamable, public ClonableBase<TimeSurfacePoolCalculator> {

public:

    virtual ~TimeSurfacePoolCalculator() {}

    virtual void update(uint64_t t, uint16_t x, uint16_t y, uint16_t p) = 0;

    virtual void update(const event& ev) = 0;

    virtual std::pair<TimeSurfaceType, bool> compute(uint64_t t, uint16_t x, uint16_t y, uint16_t p) const = 0;

    virtual std::pair<TimeSurfaceType, bool> compute(const event& ev) const = 0;

    virtual std::pair<TimeSurfaceType, bool> updateAndCompute(uint64_t t, uint16_t x, uint16_t y, uint16_t p) = 0;

    virtual std::pair<TimeSurfaceType, bool> updateAndCompute(const event& ev) = 0;

    virtual std::pair<uint16_t, uint16_t> getSize() const = 0;

    virtual void reset() = 0;

    virtual TimeSurfacePtr& getSurface(size_t idx) = 0;

    virtual const TimeSurfacePtr& getSurface(size_t idx) const = 0;

    virtual std::vector<TimeSurfaceType> sampleContexts(uint64_t t) const = 0;

    virtual size_t getNumSurfaces() const = 0;

};

}

}

#endif