00001
00002
00003
00004 #ifndef CAJUN_RNDF_CONTAINER_H
00005 #define CAJUN_RNDF_CONTAINER_H
00006
00007 #include "data_type.H"
00008 #include <map>
00009 #include <vector>
00010
00011 namespace cajun
00012 {
00013 class rndf_lane_container_t
00014 {
00015 public:
00016 rndf_lane_container_t () { }
00017
00018 bool get_lane_seg (rndf_lane_data_t &lb_,
00019 unsigned start_sid_, unsigned start_lid_,
00020 unsigned start_wid_, unsigned end_sid_,
00021 unsigned end_lid_, unsigned end_wid_);
00022 bool update_rndf_lanes (std::vector<rndf_lane_data_t> &rndf_list_);
00023
00024 void update_rndf_lane (rndf_lane_data_t &rl_);
00025
00026 void get_all_lane_segments (
00027 std::vector<rndf_lane_data_t> &rndf_lanes);
00028
00032 bool get_lane_boundary (rndf_lane_data_t &lb_,
00033 unsigned seg_id_, unsigned l_id_);
00034 private:
00037 struct lane_seg_id_pair_t
00038 {
00039 public:
00040 lane_seg_id_pair_t (unsigned ss_, unsigned sl_, unsigned sw_,
00041 unsigned es_, unsigned el_, unsigned ew_) :
00042 start_sid (ss_), start_lid (sl_), start_wid (sw_),
00043 end_sid (es_), end_lid (el_), end_wid (ew_) { }
00044 bool operator< (lane_seg_id_pair_t const &l_) const
00045 {
00046 return ((start_sid < l_.start_sid) ||
00047
00048 ((start_sid == l_.start_sid) &&
00049 (start_lid < l_.start_lid)) ||
00050
00051 ((start_sid == l_.start_sid) &&
00052 (start_lid == l_.start_lid) &&
00053 (start_wid < l_.start_wid)) ||
00054
00055 ((start_sid == l_.start_sid) &&
00056 (start_lid == l_.start_lid) &&
00057 (start_wid == l_.start_wid) &&
00058 (end_sid < l_.end_sid)) ||
00059
00060 ((start_sid == l_.start_sid) &&
00061 (start_lid == l_.start_lid) &&
00062 (start_wid == l_.start_wid) &&
00063 (end_sid == l_.end_sid) &&
00064 (end_lid < l_.end_lid)) ||
00065
00066 ((start_sid == l_.start_sid) &&
00067 (start_lid == l_.start_lid) &&
00068 (start_wid == l_.start_wid) &&
00069 (end_sid == l_.end_sid) &&
00070 (end_lid == l_.end_lid) &&
00071 (end_wid < l_.end_wid)));
00072 }
00073 unsigned start_sid;
00074 unsigned start_lid;
00075 unsigned start_wid;
00076
00077 unsigned end_sid;
00078 unsigned end_lid;
00079 unsigned end_wid;
00080 };
00081
00084 typedef std::map<lane_seg_id_pair_t,
00085 rndf_lane_data_t> lane_container_t;
00086 lane_container_t m_lane_boundaries;
00087
00088 };
00089 };
00090
00091
00092
00093
00094 #endif