OpenFPGA/libopenfpga/libopenfpgautil/src/openfpga_side_manager.h

50 lines
1.5 KiB
C++

#ifndef OPENFPGA_SIDE_MANAGER_H
#define OPENFPGA_SIDE_MANAGER_H
/********************************************************************
* Include header files that are required by function declaration
*******************************************************************/
#include <cstddef>
#include <string>
/* Header files form archfpga library */
#include "physical_types.h"
/* namespace openfpga begins */
namespace openfpga {
/********************************************************************
* Define a class for the sides of a physical block in FPGA architecture
* Basically, each block has four sides :
* TOP, RIGHT, BOTTOM, LEFT
* This class aims to provide a easy proctol for manipulating a side
********************************************************************/
class SideManager {
public: /* Constructor */
SideManager(enum e_side side);
SideManager();
SideManager(size_t side);
public: /* Accessors */
enum e_side get_side() const;
enum e_side get_opposite() const;
enum e_side get_rotate_clockwise() const;
enum e_side get_rotate_counterclockwise() const;
bool validate() const;
size_t to_size_t() const;
const char* c_str() const;
std::string to_string() const;
public: /* Mutators */
void set_side(size_t side);
void set_side(enum e_side side);
void set_opposite();
void rotate_clockwise();
void rotate_counterclockwise();
private: /* internal data */
enum e_side side_;
};
} /* namespace openfpga ends */
#endif