Program Listing for File layer_modifiers.h

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

#ifndef CPPHOTS_LAYER_MODIFIERS_H
#define CPPHOTS_LAYER_MODIFIERS_H

#include <vector>

#include "types.h"
#include "interfaces/layer_modifiers.h"


namespace cpphots {

struct ArrayLayer : public interfaces::Clonable<ArrayLayer, interfaces::EventRemapper> {

    event remapEvent(event ev, uint16_t k) override;

    void toStream(std::ostream& out) const override;

    void fromStream(std::istream& in) override;

};

class SerializingLayer : public interfaces::Clonable<SerializingLayer, interfaces::EventRemapper> {

public:

    SerializingLayer() {}

    SerializingLayer(uint16_t width, uint16_t height);

    event remapEvent(event ev, uint16_t k) override;

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

    void toStream(std::ostream& out) const override;

    void fromStream(std::istream& in) override;

private:
    uint16_t w, h;

};


class SuperCell : public interfaces::Clonable<SuperCell, interfaces::SuperCell> {

public:

    SuperCell() {}

    SuperCell(uint16_t width, uint16_t height, uint16_t K);

    std::pair<uint16_t, uint16_t> findCell(uint16_t ex, uint16_t ey) const override;

    std::pair<uint16_t, uint16_t> getSize() const override;

    std::pair<uint16_t, uint16_t> getCellSizes() const override;

    TimeSurfaceType averageTS(const TimeSurfaceType& ts, uint16_t cx, uint16_t cy) override;

    void toStream(std::ostream& out) const override;

    void fromStream(std::istream& in) override;

protected:

    uint16_t width;

    uint16_t height;

    uint16_t K;

    uint16_t wcell;

    uint16_t hcell;

    uint16_t wmax;

    uint16_t hmax;

    std::pair<uint16_t, uint16_t> getCellCenter(uint16_t cx, uint16_t cy) const;

    bool isInCell(uint16_t cx, uint16_t cy, uint16_t ex, uint16_t ey) const;

};


class SuperCellAverage : public interfaces::Clonable<SuperCellAverage, SuperCell> {

public:

    SuperCellAverage() {}

    SuperCellAverage(uint16_t width, uint16_t height, uint16_t K);

    TimeSurfaceType averageTS(const TimeSurfaceType& ts, uint16_t cx, uint16_t cy) override;

    void toStream(std::ostream& out) const override;

    void fromStream(std::istream& in) override;

private:

    struct CellMem {
        cpphots::TimeSurfaceType ts;
        unsigned int count;
    };

    std::vector<std::vector<CellMem>> cells;

};

}

#endif