//
// Created by ricardo on 2022/6/10.
//

#ifndef AUTO_BUS_GUI_RAILS_MODEL_H
#define AUTO_BUS_GUI_RAILS_MODEL_H
#include "cstdlib"

struct rail_node{
    /**
     * 站点的编号
     */
    int id;

    /**
     * 距离上一个站点的距离
     */
    int last_node_distance;

    /**
     * 距离下一个站点的距离
     */
    int next_node_distance;

    /**
     * 指向上一个站点的指针
     */
    struct rail_node* last_node;

    /**
     * 指向下一个站点的指针
     */
    struct rail_node* next_node;
};

typedef struct rail_node rail_node_t;

class RailsModel
{

public:
    /**
     * 轨道的头节点
     */
    rail_node_t *rails;

    /**
     * 轨道上的节点数量
     */
    int node_num;

    /**
     * 轨道的总长度
     */
    int total_distance;

    explicit RailsModel();

    ~RailsModel();

    /**
     * 查找指定编号的站点指针
     * @param head 轨道的头节点地址
     * @param id 需要查找的站点编号
     * @return 需要查找站点指针
     */
    rail_node_t *FindNode(int node_id) const;

    /**
     * 创建轨道链表
     * @param distance 站点之间的距离
     * @param node_number 站点的数量
     */
    void CreateRails(int distance, int node_number);

    /**
     * 释放占用的内存空间
     */
    void FreeRails();

};

#endif //AUTO_BUS_GUI_RAILS_MODEL_H