auto_bus/include/busModel.h
2022-06-26 13:57:45 +08:00

181 lines
3.7 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

//
// Created by ricardo on 2022/6/10.
//
#ifndef AUTO_BUS_GUI_BUS_MODEL_H
#define AUTO_BUS_GUI_BUS_MODEL_H
#include "railsModel.h"
#include "queryModel.h"
#include "define.h"
#include "cstdio"
#include "string"
#include "sstream"
#include "QObject"
#include "QDebug"
/**
* 控制公交车的类继承了QObject
*/
class BusControllerModel : public QObject
{
Q_OBJECT
public:
/**
* 指向公交车所在站点的指针
*/
rail_node_t *rail_pos;
/**
* 当前行进的距离
*/
int distance;
/**
* 当前前进的方向
*/
int direction;
/**
* 公交车的计时时刻
*/
int bus_time;
/**
* 轨道对象
*/
RailsModel *rail_manager;
/**
* 请求控制对象
*/
QueryModel *query_manager;
/**
* 选定的策略
*/
int chosen_strategy = -1;
/**
* 构造函数
*
*/
BusControllerModel();
/**
* 析构函数
*/
~BusControllerModel();
std::string PrintState();
bool JudgeOnStation();
public slots:
/**
* 处理打开配置文件信号的槽函数
* @param file_name 配置文件名称
*/
void ReadConfigFileSlot(const QString& file_name);
/**
* 创建上下车请求的槽函数
* @param query_type 请求的类型
* @param node_id 请求站点的id
*/
void AddQuerySlot(int query_type, int node_id) const;
signals:
/**
* 创建轨道链表完成的信号
* @param node_num 轨道上节点的个数
*/
void RailsCreated(int node_num);
/**
* 请求发生修改的槽函数
*/
void QueryChangedSignal();
private:
/**
* 轨道的总长度
*/
int total_distance = 10;
/**
* 获得公交车当前所在的位置
* @return 公交车当前所在的位置
*/
int GetBusPosition() const;
/**
* 读取指定的配置文件
* @param file_name 提供的配置文件路径
*/
void ReadConfigFile(const std::string& file_name);
/**
* 给出在指定的方向下,指定的请求于公交车当前位置的距离
* @param query 指定的请求
* @param orientation 指定的方向 BUS_CLOCK_WISE BUS_COUNTER_CLOCK_WISE
* @return 距离
*/
int GetQueryDistance(bus_query_t *query, int orientation) const;
/**
* 在先来先服务策略下应该前进的方向
* @return 前进的方向
*/
int FCFSDirection() const;
/**
* 在先来先服务策略下给出处理的请求
* @return 需要处理的请求
*/
bus_query_t *FCFSQuery() const;
/**
* 获得在SSTF策略下应该处理的请求
* @return 指向需要处理的请求的指针
*/
bus_query_t *SSTFGetQuery();
/**
* 根据指定的请求获得前进的方向,也就是前往指定的请求最近的方向
* 在SSTF策略中使用
* @param query 指定完成的请求
* @return 前进的方向
*/
int SSTFDirection(bus_query_t* query);
/**
* 在当前站上可以顺便服务的请求
* @return 服务的请求指针
*/
bus_query_t *SSTFBTWQuery() const;
/**
* 获得在SCAN策略下应该处理的请求
* @return 指向需要处理的请求的指针
*/
bus_query_t *SCANGetQuery();
/**
* 根据指定的请求获得前进的方向
* 在SCAN策略中使用
* @param query 指定完成的请求
* @return 前进的方向
*/
int SCANDirection(bus_query_t *query);
/**
* 在当前站上可以顺便服务的请求
* @return 服务的请求指针
*/
bus_query_t *SCANBTWQuery() const;
};
#endif //AUTO_BUS_GUI_BUS_MODEL_H