store facade ptr in c'tor, save a param in sub-sequent function calls

This commit is contained in:
Dennis Luxen
2014-05-18 12:37:53 +02:00
parent ef206eb4d9
commit a47467f29b
5 changed files with 97 additions and 13 deletions
+1 -2
View File
@@ -51,12 +51,11 @@ struct DescriptorConfig
template <class DataFacadeT> class BaseDescriptor
{
public:
BaseDescriptor() {} //TODO: initialize facade here.
BaseDescriptor() {}
// Maybe someone can explain the pure virtual destructor thing to me (dennis)
virtual ~BaseDescriptor() {}
virtual void Run(const RawRouteData &raw_route,
const PhantomNodes &phantom_nodes,
DataFacadeT *facade,
http::Reply &reply) = 0;
virtual void SetConfig(const DescriptorConfig &config) = 0;
};
+3 -1
View File
@@ -35,6 +35,7 @@ template <class DataFacadeT> class GPXDescriptor : public BaseDescriptor<DataFac
private:
DescriptorConfig config;
FixedPointCoordinate current;
DataFacadeT * facade;
void AddRoutePoint(const FixedPointCoordinate & coordinate, std::vector<char> & output)
{
@@ -56,12 +57,13 @@ template <class DataFacadeT> class GPXDescriptor : public BaseDescriptor<DataFac
}
public:
GPXDescriptor(DataFacadeT *facade) : facade(facade) {}
void SetConfig(const DescriptorConfig &c) { config = c; }
// TODO: reorder parameters
void Run(const RawRouteData &raw_route,
const PhantomNodes &phantom_node_list,
DataFacadeT *facade,
http::Reply &reply)
{
std::string header("<?xml version=\"1.0\" encoding=\"UTF-8\"?>"
+1 -7
View File
@@ -72,7 +72,7 @@ template <class DataFacadeT> class JSONDescriptor : public BaseDescriptor<DataFa
public:
JSONDescriptor() : facade(nullptr), entered_restricted_area_count(0)
JSONDescriptor(DataFacadeT *facade) : facade(facade), entered_restricted_area_count(0)
{
shortest_leg_end_indices.emplace_back(0);
alternative_leg_end_indices.emplace_back(0);
@@ -98,12 +98,9 @@ template <class DataFacadeT> class JSONDescriptor : public BaseDescriptor<DataFa
void Run(const RawRouteData &raw_route,
const PhantomNodes &phantom_nodes,
// TODO: move facade initalization to c'tor
DataFacadeT *f,
http::Reply &reply)
{
JSON::Object json_result;
facade = f;
if (INVALID_EDGE_WEIGHT == raw_route.shortest_path_length)
{
@@ -147,7 +144,6 @@ template <class DataFacadeT> class JSONDescriptor : public BaseDescriptor<DataFa
BuildTextualDescription(description_factory,
json_route_instructions,
raw_route.shortest_path_length,
facade,
shortest_path_segments);
json_result.values["route_instructions"] = json_route_instructions;
}
@@ -209,7 +205,6 @@ template <class DataFacadeT> class JSONDescriptor : public BaseDescriptor<DataFa
BuildTextualDescription(alternate_description_factory,
json_current_alt_instructions,
raw_route.alternative_path_length,
facade,
alternative_path_segments);
json_alt_instructions.values.push_back(json_current_alt_instructions);
json_result.values["alternative_instructions"] = json_alt_instructions;
@@ -276,7 +271,6 @@ template <class DataFacadeT> class JSONDescriptor : public BaseDescriptor<DataFa
inline void BuildTextualDescription(DescriptionFactory &description_factory,
JSON::Array & json_instruction_array,
const int route_length,
const DataFacadeT *facade,
std::vector<Segment> &route_segments_list)
{
// Segment information has following format: