# 通用方法库
## 1 . 文件操作库 - FileControl
### 1.1 概述
该类主要用于操作本地文件,如txt、doc等。
### 1.2 函数
#### FileExist
说明:判断文件是否存在
原型:static bool FileExist(const std::string& strFilePath)
参数:[in] strFilePath - 文件路径+文件名(含扩展名)
[out] none
[return] true - 文件存在; false - 文件不存在
示例:
\#include "FileControl.h"
bool bExist = CFileControl::FileExist("mission.txt");
#### FileCopy
说明:复制文件
原型:static bool FileCopy(const std::string& strFromFile, const std::string& strToFile);
参数:[in] strFromFile - 原始文件路径(路径+文件名)
[out] none
strToFile - 目标文件路径(路径+文件名)
[return] true - 操作成功; false - 操作失败
示例:
\#include "FileControl.h"
bool bExist = CFileControl::FileExist("test1/mission.txt", "test2/mission.txt");
#### FileDelete
说明:删除指定文件
原型:static bool FileDelete(const std::string & strFilePath);
参数:[in] strFilePath - 文件路径j+文件名(含扩展名)
[out] none
[return] true - 操作成功; false - 操作失败
示例:
\#include "FileControl.h"
bool bExist = CFileControl::FileDelete("mission.txt");
## 2. 类型转换库 - TypeConvert
### 2.1 概述
用于C++内常用类型转换,专注算法研究,减少开发麻烦。
### 2.2 函数
#### IntToString
说明:int类型转string类型
原型:static inline std::string IntToString( int val );
参数:[in] val - 待转换数据
[out] none
[return] 转换后数据
示例:
\#include "TypeConvert.h"
#include <string>
std::string str = CTypeConvert::IntToString(2);
#### StringToInt
说明:string类型转int类型
原型:static inline int StringToInt( std::string str );
参数:[in] val - 待转换数据
[out] none
[return] 转换后数据
示例:
\#include "TypeConvert.h"
#include <string>
int num = CTypeConvert::StringToInt("2");
#### DoubleToString
说明:double类型转string类型
原型:static inline std::string DoubleToString(double val);
参数:[in] val - 待转换数据
[out] none
[return] 转换后数据
示例:
\#include "TypeConvert.h"
#include <string>
std::string str = CTypeConvert::DoubleToString(2.0);
#### StringToDouble
说明:string类型转double类型
原型:static inline double StringToDouble( std::string str );
参数:[in] val - 待转换数据
[out] none
[return] 转换后数据
示例:
\#include "TypeConvert.h"
#include <string>
double str = CTypeConvert::StringToDouble("2.0");
#### Stringsplit
说明:将字符串按照指定字符拆分成vector
原型:static void Stringsplit(const std::string& str, const char split, std::vector<std::string>& res);
参数:[in] str - 原始待拆分字符
split - 指定字符
[out] none
[return] res - 拆分后的string容器
示例:
\#include "TypeConvert.h"
#include <string>
std::vector<std::string> vecline;
CTypeConvert::Stringsplit(“2022-09-04”, '-', vecline);
## 3. 任务文件库 - MissionControl
### 3.1 概述
对任务文件进行相关操作
### 3.2 结构体
#### tagMission
说明:任务结构体
声明:int nmissionID; // 任务ID
int ndriveAction; // 动作:0任务初始化, 1前进, 2倒车, 3停车, 4终止下电, 5拖斗卸载, 6定点卸载
double dpositionLAN; // 位置经度
double dpositiionLON; // 位置纬度
std::string strtrajectpath; // 轨迹文件路径
tagMission(int ID = -1, int dA = -1, double posLAN = 0, double posLON = 0, std::string strtrace = "") // 构造函数
bool operator == (const int & missionID) // 运算符重载: ==
tagMission& operator = (const tagMission & mission) // 运算符重载:=
bool operator < (const tagMission & ms1) const // 运算符重载: <
### 3.3 变量
std::vector<tagMission> vecMission; // 当前所有未执行的任务链表
### 3.4 函数
#### CMissionControl
说明:构造函数,直接读取指定路径的任务文件
原型:CMissionControl(const std::string strFilePath);
参数:[in] strfilePath - 任务文件路径+文件名(含扩展名)
[out] none
[return] none
示例:
\#include "MissionControl.h"
#include <string>
CMissionControl * pMissionControl = new CMissionControl("mission.txt");
#### ~CMissionControl
说明:析构函数
原型:~CMissionControl();
参数:
示例:
#### ReadFromFile
说明:从文件中读任务,并赋值到变量中
原型:ReadFromFile(const std::string strFilePath);
参数:[in] strFilePath - 任务文件路径+文件名(含扩展名)
[out] none
[return] true - 操作成功; false - 操作失败
示例:
\#include "MissionControl.h"
#include <string>
CMissionControl pMissionControl ("mission.txt");
pMissionControl.ReadFromFile("mission2.txt");
#### WriteToFile
说明:将任务变量写如文件中
原型:WriteToFile(const std::string& strFilePath, bool bContainFinished);
参数:[in] strFilePath - 写入的文件路径(含扩展名)
bContainFinished - 是否包含已完成任务(如果包含,则文件写入vecMission_Finished + vecMission,否则,只写入vecMission)
[out] none
[return] true - 操作成功; false - 操作失败
示例:
\#include "MissionControl.h"
#include <string>
CMissionControl pMissionControl ("mission.txt");
pMissionControl.WriteToFile("mission2.txt");
#### InsertMissionAtPos
说明:在vecMission链表中的missionID后插入新的任务,插入之后的任务重新自动编号
原型:InsertMissionAtPos(const std::vector<tagMission>& newmission, const int & missionID);
参数:[in] newmission - 新插入的任务列表
missionID - 插入位置(在该任务ID后插入新任务),missionID等于-1则直接在文件最前追加, mission等于-2则直接在文件最后追加
[out] none
[return] true - 操作成功; false - 操作失败
示例:
\#include "MissionControl.h"
#include <string>
CMissionControl pMissionControl ("mission.txt");
pMissionControl.InsertMissionAtPos(vector<tagMission>{ tagMission(2,0,0,0,"path.txt") }, 1); // 在任务ID=1后插入一个新的任务
#### RemoveMissionAtPos
说明:删除指定ID任务,后续任务重新编号
原型:bool RemoveMissionAtPos(const int& missionID);
参数:[in] missionID - 删除任务ID
[out] none
[return] true - 操作成功; false - 操作失败
示例:
\#include "MissionControl.h"
#include <string>
CMissionControl pMissionControl ("mission.txt");
pMissionControl.RemoveMissionAtPos(3); // 删除任务ID=3
#### ModifyMissionAtPos
说明:修改指定任务的指定字段(原任务ID不会变)
原型:bool ModifyMissionAtPos(const int& missionID, tagMission newMission);
参数:[in] missionID - 任务ID
newMission - 修改后的任务
[out] none
[return] true - 操作成功; false -操作失败
示例:
\#include "MissionControl.h"
#include <string>
CMissionControl pMissionControl ("mission.txt");
pMissionControl.ModifyMissionAtPos( 3, tagMission( 2, 0, 0, 0, "path2.txt") ); // 修改ID=3的任务,即使新任务ID为2,修改后任务ID仍保留原有的ID=3
#### SetCycleFinish
说明:将当前任务设置一个循环结束,将完成任务重新编号
原型:bool SetCycleFinish(const int& missionID);