DataRW.h 20 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861
  1. /// \file DataRW.h
  2. /// \brief File operations for loading vector map files, loading kml map files and writing log .csv files
  3. /// \author Hatem Darweesh
  4. /// \date Jun 23, 2016
  5. #ifndef DATARW_H_
  6. #define DATARW_H_
  7. #include <string>
  8. #include <fstream>
  9. #include <sstream>
  10. #include <vector>
  11. #include <iostream>
  12. #include <limits>
  13. #include "vector_map_msgs/PointArray.h"
  14. #include "vector_map_msgs/LaneArray.h"
  15. #include "vector_map_msgs/NodeArray.h"
  16. #include "vector_map_msgs/StopLineArray.h"
  17. #include "vector_map_msgs/DTLaneArray.h"
  18. #include "vector_map_msgs/LineArray.h"
  19. #include "vector_map_msgs/AreaArray.h"
  20. #include "vector_map_msgs/WayAreaArray.h"
  21. #include "vector_map_msgs/SignalArray.h"
  22. #include "vector_map_msgs/VectorArray.h"
  23. #include "vector_map_msgs/CrossRoadArray.h"
  24. #include "vector_map_msgs/RoadSignArray.h"
  25. #include "vector_map_msgs/CurbArray.h"
  26. #include "vector_map_msgs/RoadEdgeArray.h"
  27. #include "vector_map_msgs/CrossWalkArray.h"
  28. #include "UtilityH.h"
  29. namespace UtilityHNS {
  30. class DataRW
  31. {
  32. public:
  33. DataRW();
  34. virtual ~DataRW();
  35. static std::string LoggingMainfolderName;
  36. static std::string ControlLogFolderName;
  37. static std::string PathLogFolderName;
  38. static std::string GlobalPathLogFolderName;
  39. static std::string StatesLogFolderName;
  40. static std::string SimulationFolderName;
  41. static std::string KmlMapsFolderName;
  42. static std::string PredictionFolderName;
  43. static std::string TrackingFolderName;
  44. static void WriteKMLFile(const std::string& fileName, const std::vector<std::string>& gps_list);
  45. static void WriteKMLFile(const std::string& fileName, const std::vector<std::vector<std::string> >& gps_list);
  46. static void WriteLogData(const std::string& logFolder, const std::string& logTitle, const std::string& header, const std::vector<std::string>& logData);
  47. static void CreateLoggingFolder();
  48. };
  49. class SimpleReaderBase
  50. {
  51. private:
  52. std::ifstream* m_pFile;
  53. std::vector<std::string> m_RawHeaders;
  54. std::vector<std::string> m_DataTitlesHeader;
  55. std::vector<std::vector<std::vector<std::string> > > m_AllData;
  56. int m_nHeders;
  57. int m_iDataTitles;
  58. int m_nVarPerObj;
  59. int m_nLineHeaders;
  60. std::string m_HeaderRepeatKey;
  61. char m_Separator;
  62. void ReadHeaders();
  63. void ParseDataTitles(const std::string& header);
  64. public:
  65. /**
  66. *
  67. * @param fileName log file name
  68. * @param nHeaders number of data headers
  69. * @param iDataTitles which row contains the data titles
  70. * @param nVariablesForOneObject 0 means each row represents one object
  71. */
  72. SimpleReaderBase(const std::string& fileName, const int& nHeaders = 2, const char& separator = ',',
  73. const int& iDataTitles = 1, const int& nVariablesForOneObject = 0,
  74. const int& nLineHeaders = 0, const std::string& headerRepeatKey = "...");
  75. ~SimpleReaderBase();
  76. protected:
  77. int ReadAllData();
  78. bool ReadSingleLine(std::vector<std::vector<std::string> >& line);
  79. };
  80. class GPSDataReader : public SimpleReaderBase
  81. {
  82. public:
  83. struct GPSBasicData
  84. {
  85. double lat;
  86. double lon;
  87. double alt;
  88. double dir;
  89. double distance;
  90. };
  91. public:
  92. GPSDataReader(const std::string& fileName) : SimpleReaderBase(fileName){}
  93. ~GPSDataReader(){}
  94. bool ReadNextLine(GPSBasicData& data);
  95. int ReadAllData(std::vector<GPSBasicData>& data_list);
  96. };
  97. class SimulationFileReader : public SimpleReaderBase
  98. {
  99. public:
  100. struct SimulationPoint
  101. {
  102. double x;
  103. double y;
  104. double z;
  105. double a;
  106. double c;
  107. double v;
  108. std::string name;
  109. };
  110. struct SimulationData
  111. {
  112. SimulationPoint startPoint;
  113. SimulationPoint goalPoint;
  114. std::vector<SimulationPoint> simuCars;
  115. };
  116. SimulationFileReader(const std::string& fileName) : SimpleReaderBase(fileName, 1){}
  117. ~SimulationFileReader(){}
  118. bool ReadNextLine(SimulationPoint& data);
  119. int ReadAllData(SimulationData& data_list);
  120. };
  121. class LocalizationPathReader : public SimpleReaderBase
  122. {
  123. public:
  124. struct LocalizationWayPoint
  125. {
  126. double t;
  127. double x;
  128. double y;
  129. double z;
  130. double a;
  131. double v;
  132. };
  133. LocalizationPathReader(const std::string& fileName, const char& separator) : SimpleReaderBase(fileName, 1, separator){}
  134. ~LocalizationPathReader(){}
  135. bool ReadNextLine(LocalizationWayPoint& data);
  136. int ReadAllData(std::vector<LocalizationWayPoint>& data_list);
  137. };
  138. class AisanPointsFileReader : public SimpleReaderBase
  139. {
  140. public:
  141. struct AisanPoints
  142. {
  143. int PID;
  144. double B;
  145. double L;
  146. double H;
  147. double Bx;
  148. double Ly;
  149. int Ref;
  150. int MCODE1;
  151. int MCODE2;
  152. int MCODE3;
  153. };
  154. AisanPointsFileReader(const std::string& fileName) : SimpleReaderBase(fileName, 1)
  155. {
  156. m_min_id = std::numeric_limits<int>::max();
  157. }
  158. AisanPointsFileReader(const vector_map_msgs::PointArray& _points);
  159. ~AisanPointsFileReader(){}
  160. bool ReadNextLine(AisanPoints& data);
  161. int ReadAllData(std::vector<AisanPoints>& data_list);
  162. void ParseNextLine(const vector_map_msgs::Point& _rec, AisanPoints& data);
  163. AisanPoints* GetDataRowById(int _pid);
  164. std::vector<AisanPoints> m_data_list;
  165. private:
  166. int m_min_id;
  167. std::vector<AisanPoints*> m_data_map;
  168. };
  169. class AisanNodesFileReader : public SimpleReaderBase
  170. {
  171. public:
  172. struct AisanNode
  173. {
  174. int NID;
  175. int PID;
  176. };
  177. AisanNodesFileReader(const std::string& fileName) : SimpleReaderBase(fileName, 1)
  178. {
  179. m_min_id = std::numeric_limits<int>::max();
  180. }
  181. AisanNodesFileReader(const vector_map_msgs::NodeArray& _nodes);
  182. ~AisanNodesFileReader(){}
  183. bool ReadNextLine(AisanNode& data);
  184. int ReadAllData(std::vector<AisanNode>& data_list);
  185. void ParseNextLine(const vector_map_msgs::Node& _rec, AisanNode& data);
  186. AisanNode* GetDataRowById(int _nid);
  187. std::vector<AisanNode> m_data_list;
  188. private:
  189. int m_min_id;
  190. std::vector<AisanNode*> m_data_map;
  191. };
  192. class AisanLinesFileReader : public SimpleReaderBase
  193. {
  194. public:
  195. struct AisanLine
  196. {
  197. int LID;
  198. int BPID;
  199. int FPID;
  200. int BLID;
  201. int FLID;
  202. };
  203. AisanLinesFileReader(const std::string& fileName) : SimpleReaderBase(fileName, 1)
  204. {
  205. m_min_id = std::numeric_limits<int>::max();
  206. }
  207. AisanLinesFileReader(const vector_map_msgs::LineArray & _lines);
  208. ~AisanLinesFileReader(){}
  209. bool ReadNextLine(AisanLine& data);
  210. int ReadAllData(std::vector<AisanLine>& data_list);
  211. void ParseNextLine(const vector_map_msgs::Line& _rec, AisanLine& data);
  212. AisanLine* GetDataRowById(int _lid);
  213. std::vector<AisanLine> m_data_list;
  214. private:
  215. int m_min_id;
  216. std::vector<AisanLine*> m_data_map;
  217. };
  218. class AisanCenterLinesFileReader : public SimpleReaderBase
  219. {
  220. public:
  221. struct AisanCenterLine
  222. {
  223. int DID;
  224. int Dist;
  225. int PID;
  226. double Dir;
  227. double Apara;
  228. double r;
  229. double slope;
  230. double cant;
  231. double LW;
  232. double RW;
  233. };
  234. AisanCenterLinesFileReader(const std::string& fileName) : SimpleReaderBase(fileName, 1)
  235. {
  236. m_min_id = std::numeric_limits<int>::max();
  237. }
  238. AisanCenterLinesFileReader(const vector_map_msgs::DTLaneArray& _dtLanes);
  239. ~AisanCenterLinesFileReader(){}
  240. bool ReadNextLine(AisanCenterLine& data);
  241. int ReadAllData(std::vector<AisanCenterLine>& data_list);
  242. void ParseNextLine(const vector_map_msgs::DTLane& _rec, AisanCenterLine& data);
  243. AisanCenterLine* GetDataRowById(int _lnid);
  244. std::vector<AisanCenterLine> m_data_list;
  245. private:
  246. int m_min_id;
  247. std::vector<AisanCenterLine*> m_data_map;
  248. };
  249. class AisanAreasFileReader : public SimpleReaderBase
  250. {
  251. public:
  252. struct AisanArea
  253. {
  254. int AID;
  255. int SLID;
  256. int ELID;
  257. };
  258. AisanAreasFileReader(const std::string& fileName) : SimpleReaderBase(fileName, 1)
  259. {
  260. m_min_id = std::numeric_limits<int>::max();
  261. }
  262. AisanAreasFileReader(const vector_map_msgs::AreaArray& _areas);
  263. ~AisanAreasFileReader(){}
  264. bool ReadNextLine(AisanArea& data);
  265. int ReadAllData(std::vector<AisanArea>& data_list);
  266. void ParseNextLine(const vector_map_msgs::Area& _rec, AisanArea& data);
  267. AisanArea* GetDataRowById(int _lnid);
  268. std::vector<AisanArea> m_data_list;
  269. private:
  270. int m_min_id;
  271. std::vector<AisanArea*> m_data_map;
  272. };
  273. class AisanIntersectionFileReader : public SimpleReaderBase
  274. {
  275. public:
  276. struct AisanIntersection
  277. {
  278. int ID;
  279. int AID;
  280. int LinkID;
  281. };
  282. AisanIntersectionFileReader(const std::string& fileName) : SimpleReaderBase(fileName, 1)
  283. {
  284. m_min_id = std::numeric_limits<int>::max();
  285. }
  286. AisanIntersectionFileReader(const vector_map_msgs::CrossRoadArray& _inters);
  287. ~AisanIntersectionFileReader(){}
  288. bool ReadNextLine(AisanIntersection& data);
  289. int ReadAllData(std::vector<AisanIntersection>& data_list);
  290. void ParseNextLine(const vector_map_msgs::CrossRoad& _rec, AisanIntersection& data);
  291. AisanIntersection* GetDataRowById(int _lnid);
  292. std::vector<AisanIntersection> m_data_list;
  293. private:
  294. int m_min_id;
  295. std::vector<AisanIntersection*> m_data_map;
  296. };
  297. class AisanLanesFileReader : public SimpleReaderBase
  298. {
  299. public:
  300. struct AisanLane
  301. {
  302. int LnID ;
  303. int DID ;
  304. int BLID ;
  305. int FLID ;
  306. int BNID ;
  307. int FNID ;
  308. int JCT ;
  309. int BLID2 ;
  310. int BLID3 ;
  311. int BLID4 ;
  312. int FLID2 ;
  313. int FLID3 ;
  314. int FLID4 ;
  315. int ClossID ;
  316. double Span ;
  317. int LCnt ;
  318. int Lno ;
  319. int LaneType;
  320. int LimitVel;
  321. int RefVel ;
  322. int RoadSecID;
  323. int LaneChgFG;
  324. int LinkWAID;
  325. char LaneDir;
  326. int LeftLaneId;
  327. int RightLaneId;
  328. int originalMapID;
  329. };
  330. AisanLanesFileReader(const std::string& fileName) : SimpleReaderBase(fileName, 1)
  331. {
  332. m_min_id = std::numeric_limits<int>::max();
  333. }
  334. AisanLanesFileReader(const vector_map_msgs::LaneArray& _lanes);
  335. ~AisanLanesFileReader(){}
  336. bool ReadNextLine(AisanLane& data);
  337. int ReadAllData(std::vector<AisanLane>& data_list);
  338. void ParseNextLine(const vector_map_msgs::Lane& _rec, AisanLane& data);
  339. AisanLane* GetDataRowById(int _lnid);
  340. std::vector<AisanLane> m_data_list;
  341. private:
  342. int m_min_id;
  343. std::vector<AisanLane*> m_data_map;
  344. };
  345. class AisanStopLineFileReader : public SimpleReaderBase
  346. {
  347. public:
  348. struct AisanStopLine
  349. {
  350. int ID;
  351. int LID;
  352. int TLID;
  353. int SignID;
  354. int LinkID;
  355. };
  356. AisanStopLineFileReader(const std::string& fileName) : SimpleReaderBase(fileName, 1)
  357. {
  358. m_min_id = std::numeric_limits<int>::max();
  359. }
  360. AisanStopLineFileReader(const vector_map_msgs::StopLineArray& _stopLines);
  361. ~AisanStopLineFileReader(){}
  362. bool ReadNextLine(AisanStopLine& data);
  363. int ReadAllData(std::vector<AisanStopLine>& data_list);
  364. void ParseNextLine(const vector_map_msgs::StopLine& _rec, AisanStopLine& data);
  365. AisanStopLine* GetDataRowById(int _lnid);
  366. std::vector<AisanStopLine> m_data_list;
  367. private:
  368. int m_min_id;
  369. std::vector<AisanStopLine*> m_data_map;
  370. };
  371. class AisanRoadSignFileReader : public SimpleReaderBase
  372. {
  373. public:
  374. struct AisanRoadSign
  375. {
  376. int ID;
  377. int VID;
  378. int PLID;
  379. int Type;
  380. int LinkID;
  381. };
  382. AisanRoadSignFileReader(const std::string& fileName) : SimpleReaderBase(fileName, 1)
  383. {
  384. m_min_id = std::numeric_limits<int>::max();
  385. }
  386. AisanRoadSignFileReader(const vector_map_msgs::RoadSignArray& _signs);
  387. ~AisanRoadSignFileReader(){}
  388. bool ReadNextLine(AisanRoadSign& data);
  389. int ReadAllData(std::vector<AisanRoadSign>& data_list);
  390. void ParseNextLine(const vector_map_msgs::RoadSign& _rec, AisanRoadSign& data);
  391. AisanRoadSign* GetDataRowById(int _lnid);
  392. std::vector<AisanRoadSign> m_data_list;
  393. private:
  394. int m_min_id;
  395. std::vector<AisanRoadSign*> m_data_map;
  396. };
  397. class AisanSignalFileReader : public SimpleReaderBase
  398. {
  399. public:
  400. struct AisanSignal
  401. {
  402. int ID;
  403. int VID;
  404. int PLID;
  405. int Type;
  406. int LinkID;
  407. };
  408. AisanSignalFileReader(const std::string& fileName) : SimpleReaderBase(fileName, 1)
  409. {
  410. m_min_id = std::numeric_limits<int>::max();
  411. }
  412. AisanSignalFileReader(const vector_map_msgs::SignalArray& _signals);
  413. ~AisanSignalFileReader(){}
  414. bool ReadNextLine(AisanSignal& data);
  415. int ReadAllData(std::vector<AisanSignal>& data_list);
  416. void ParseNextLine(const vector_map_msgs::Signal& _rec, AisanSignal& data);
  417. AisanSignal* GetDataRowById(int _lnid);
  418. std::vector<AisanSignal> m_data_list;
  419. private:
  420. int m_min_id;
  421. std::vector<AisanSignal*> m_data_map;
  422. };
  423. class AisanVectorFileReader : public SimpleReaderBase
  424. {
  425. public:
  426. struct AisanVector
  427. {
  428. int VID;
  429. int PID;
  430. double Hang;
  431. double Vang;
  432. };
  433. AisanVectorFileReader(const std::string& fileName) : SimpleReaderBase(fileName, 1)
  434. {
  435. m_min_id = std::numeric_limits<int>::max();
  436. }
  437. AisanVectorFileReader(const vector_map_msgs::VectorArray& _vectors);
  438. ~AisanVectorFileReader(){}
  439. bool ReadNextLine(AisanVector& data);
  440. int ReadAllData(std::vector<AisanVector>& data_list);
  441. void ParseNextLine(const vector_map_msgs::Vector& _rec, AisanVector& data);
  442. AisanVector* GetDataRowById(int _lnid);
  443. std::vector<AisanVector> m_data_list;
  444. private:
  445. int m_min_id;
  446. std::vector<AisanVector*> m_data_map;
  447. };
  448. class AisanCurbFileReader : public SimpleReaderBase
  449. {
  450. public:
  451. struct AisanCurb
  452. {
  453. int ID;
  454. int LID;
  455. double Height;
  456. double Width;
  457. int dir;
  458. int LinkID;
  459. };
  460. AisanCurbFileReader(const std::string& fileName) : SimpleReaderBase(fileName, 1)
  461. {
  462. m_min_id = std::numeric_limits<int>::max();
  463. }
  464. AisanCurbFileReader(const vector_map_msgs::CurbArray& _curbs);
  465. ~AisanCurbFileReader(){}
  466. bool ReadNextLine(AisanCurb& data);
  467. int ReadAllData(std::vector<AisanCurb>& data_list);
  468. void ParseNextLine(const vector_map_msgs::Curb& _rec, AisanCurb& data);
  469. AisanCurb* GetDataRowById(int _lnid);
  470. std::vector<AisanCurb> m_data_list;
  471. private:
  472. int m_min_id;
  473. std::vector<AisanCurb*> m_data_map;
  474. };
  475. class AisanRoadEdgeFileReader : public SimpleReaderBase
  476. {
  477. public:
  478. struct AisanRoadEdge
  479. {
  480. int ID;
  481. int LID;
  482. int LinkID;
  483. };
  484. AisanRoadEdgeFileReader(const std::string& fileName) : SimpleReaderBase(fileName, 1)
  485. {
  486. m_min_id = std::numeric_limits<int>::max();
  487. }
  488. AisanRoadEdgeFileReader(const vector_map_msgs::RoadEdgeArray& _roadEdges);
  489. ~AisanRoadEdgeFileReader(){}
  490. bool ReadNextLine(AisanRoadEdge& data);
  491. int ReadAllData(std::vector<AisanRoadEdge>& data_list);
  492. void ParseNextLine(const vector_map_msgs::RoadEdge& _rec, AisanRoadEdge& data);
  493. AisanRoadEdge* GetDataRowById(int _lnid);
  494. std::vector<AisanRoadEdge> m_data_list;
  495. private:
  496. int m_min_id;
  497. std::vector<AisanRoadEdge*> m_data_map;
  498. };
  499. class AisanCrossWalkFileReader : public SimpleReaderBase
  500. {
  501. public:
  502. struct AisanCrossWalk
  503. {
  504. int ID;
  505. int AID;
  506. int Type;
  507. int BdID;
  508. int LinkID;
  509. };
  510. AisanCrossWalkFileReader(const std::string& fileName) : SimpleReaderBase(fileName, 1)
  511. {
  512. m_min_id = std::numeric_limits<int>::max();
  513. }
  514. AisanCrossWalkFileReader(const vector_map_msgs::CrossWalkArray& _crossWalks);
  515. ~AisanCrossWalkFileReader(){}
  516. bool ReadNextLine(AisanCrossWalk& data);
  517. int ReadAllData(std::vector<AisanCrossWalk>& data_list);
  518. void ParseNextLine(const vector_map_msgs::CrossWalk& _rec, AisanCrossWalk& data);
  519. AisanCrossWalk* GetDataRowById(int _lnid);
  520. std::vector<AisanCrossWalk> m_data_list;
  521. private:
  522. int m_min_id;
  523. std::vector<AisanCrossWalk*> m_data_map;
  524. };
  525. class AisanWayareaFileReader : public SimpleReaderBase
  526. {
  527. public:
  528. struct AisanWayarea
  529. {
  530. int ID;
  531. int AID;
  532. int LinkID;
  533. };
  534. AisanWayareaFileReader(const std::string& fileName) : SimpleReaderBase(fileName, 1)
  535. {
  536. m_min_id = std::numeric_limits<int>::max();
  537. }
  538. AisanWayareaFileReader(const vector_map_msgs::WayAreaArray& _wayArea);
  539. ~AisanWayareaFileReader(){}
  540. bool ReadNextLine(AisanWayarea& data);
  541. int ReadAllData(std::vector<AisanWayarea>& data_list);
  542. void ParseNextLine(const vector_map_msgs::WayArea& _rec, AisanWayarea& data);
  543. AisanWayarea* GetDataRowById(int _lnid);
  544. std::vector<AisanWayarea> m_data_list;
  545. private:
  546. int m_min_id;
  547. std::vector<AisanWayarea*> m_data_map;
  548. };
  549. class AisanDataConnFileReader : public SimpleReaderBase
  550. {
  551. public:
  552. struct DataConn
  553. {
  554. int LID; // lane id
  555. int SLID; // stop line id
  556. int SID; // signal id
  557. int SSID; // stop sign id
  558. };
  559. AisanDataConnFileReader(const std::string& fileName) : SimpleReaderBase(fileName, 1){}
  560. ~AisanDataConnFileReader(){}
  561. bool ReadNextLine(DataConn& data);
  562. int ReadAllData(std::vector<DataConn>& data_list);
  563. };
  564. class MapRaw
  565. {
  566. public:
  567. UtilityHNS::AisanLanesFileReader* pLanes;
  568. UtilityHNS::AisanPointsFileReader* pPoints;
  569. UtilityHNS::AisanCenterLinesFileReader* pCenterLines;
  570. UtilityHNS::AisanIntersectionFileReader* pIntersections;
  571. UtilityHNS::AisanAreasFileReader* pAreas;
  572. UtilityHNS::AisanLinesFileReader* pLines;
  573. UtilityHNS::AisanStopLineFileReader* pStopLines;
  574. UtilityHNS::AisanSignalFileReader* pSignals;
  575. UtilityHNS::AisanVectorFileReader* pVectors;
  576. UtilityHNS::AisanCurbFileReader* pCurbs;
  577. UtilityHNS::AisanRoadEdgeFileReader* pRoadedges;
  578. UtilityHNS::AisanWayareaFileReader* pWayAreas;
  579. UtilityHNS::AisanCrossWalkFileReader* pCrossWalks;
  580. UtilityHNS::AisanNodesFileReader* pNodes;
  581. struct timespec _time_out;
  582. MapRaw()
  583. {
  584. pLanes = nullptr;
  585. pPoints = nullptr;
  586. pCenterLines = nullptr;
  587. pIntersections = nullptr;
  588. pAreas = nullptr;
  589. pLines = nullptr;
  590. pStopLines = nullptr;
  591. pSignals = nullptr;
  592. pVectors = nullptr;
  593. pCurbs = nullptr;
  594. pRoadedges = nullptr;
  595. pWayAreas = nullptr;
  596. pCrossWalks = nullptr;
  597. pNodes = nullptr;
  598. UtilityH::GetTickCount(_time_out);
  599. }
  600. ~MapRaw()
  601. {
  602. if(pLanes != nullptr)
  603. {
  604. delete pLanes;
  605. pLanes = nullptr;
  606. }
  607. if(pPoints != nullptr)
  608. {
  609. delete pPoints;
  610. pPoints = nullptr;
  611. }
  612. if(pCenterLines != nullptr)
  613. {
  614. delete pCenterLines;
  615. pCenterLines = nullptr;
  616. }
  617. if(pIntersections != nullptr)
  618. {
  619. delete pIntersections;
  620. pIntersections = nullptr;
  621. }
  622. if(pAreas != nullptr)
  623. {
  624. delete pAreas;
  625. pAreas = nullptr;
  626. }
  627. if(pLines != nullptr)
  628. {
  629. delete pLines;
  630. pLines = nullptr;
  631. }
  632. if(pStopLines != nullptr)
  633. {
  634. delete pStopLines;
  635. pStopLines = nullptr;
  636. }
  637. if(pSignals != nullptr)
  638. {
  639. delete pSignals;
  640. pSignals = nullptr;
  641. }
  642. if(pVectors != nullptr)
  643. {
  644. delete pVectors;
  645. pVectors = nullptr;
  646. }
  647. if(pCurbs != nullptr)
  648. {
  649. delete pCurbs;
  650. pCurbs = nullptr;
  651. }
  652. if(pRoadedges != nullptr)
  653. {
  654. delete pRoadedges;
  655. pRoadedges = nullptr;
  656. }
  657. if(pWayAreas != nullptr)
  658. {
  659. delete pWayAreas;
  660. pWayAreas = nullptr;
  661. }
  662. if(pCrossWalks != nullptr)
  663. {
  664. delete pCrossWalks;
  665. pCrossWalks = nullptr;
  666. }
  667. if(pNodes != nullptr)
  668. {
  669. delete pNodes;
  670. pNodes = nullptr;
  671. }
  672. }
  673. int GetVersion()
  674. {
  675. bool bTimeOut = UtilityH::GetTimeDiffNow(_time_out) > 2.0;
  676. bool bLoaded = pLanes != nullptr && pPoints != nullptr && pCenterLines != nullptr && pNodes != nullptr;
  677. int iVersion = 0;
  678. if(bLoaded && bTimeOut)
  679. {
  680. iVersion = 2;
  681. if(pNodes->m_data_list.size() == 0)
  682. {
  683. iVersion = 1;
  684. }
  685. }
  686. // else
  687. // {
  688. // bLoaded = pLanes != nullptr && pPoints != nullptr && pCenterLines != nullptr;
  689. // if(bLoaded && bTimeOut)
  690. // {
  691. // iVersion = 1;
  692. // if(pNodes == nullptr)
  693. // pNodes = new AisanNodesFileReader(vector_map_msgs::NodeArray());
  694. // }
  695. // }
  696. if(bLoaded && bTimeOut)
  697. {
  698. if(pIntersections == nullptr)
  699. pIntersections = new AisanIntersectionFileReader(vector_map_msgs::CrossRoadArray());
  700. if(pLines == nullptr)
  701. pLines = new AisanLinesFileReader(vector_map_msgs::LineArray());
  702. if(pStopLines == nullptr)
  703. pStopLines = new AisanStopLineFileReader(vector_map_msgs::StopLineArray());
  704. if(pSignals == nullptr)
  705. pSignals = new AisanSignalFileReader(vector_map_msgs::SignalArray());
  706. if(pVectors == nullptr)
  707. pVectors = new AisanVectorFileReader(vector_map_msgs::VectorArray());
  708. if(pCurbs == nullptr)
  709. pCurbs = new AisanCurbFileReader(vector_map_msgs::CurbArray());
  710. if(pRoadedges == nullptr)
  711. pRoadedges = new AisanRoadEdgeFileReader(vector_map_msgs::RoadEdgeArray());
  712. if(pWayAreas == nullptr)
  713. pWayAreas = new AisanWayareaFileReader(vector_map_msgs::WayAreaArray());
  714. if(pCrossWalks == nullptr)
  715. pCrossWalks = new AisanCrossWalkFileReader(vector_map_msgs::CrossWalkArray());
  716. }
  717. return iVersion;
  718. }
  719. };
  720. } /* namespace UtilityHNS */
  721. #endif /* DATARW_H_ */