00001
00005
#include <iostream>
00006
00007
#include <utils/ConfigFile.h>
00008
#include <utils/Generator.h>
00009
#include <TimeSource/TimeSource.h>
00010
#include <RoadDest/RoadDest.h>
00011
00012
#include "RoadSource.h"
00013
00017 class OutputRoadSource :
public RoadSource {
00018
public:
00019
OutputRoadSource();
00020
virtual ~
OutputRoadSource();
00021
00023
virtual bool getPoints(utils::Time& time,
00024 std::vector<utils::Vec3d>& points,
00025
bool blocking =
true);
00026
00028
bool init(utils::ConfigFile& params,
00029
RoadSourceGenerator* gen, utils::SymbolTable* globals);
00030
00031
private:
00032
RoadSource* _contained;
00033
RoadDest* _output;
00034 };
00035
00037 RoadSource*
create_RoadSource_out(
RoadSourceGenerator* gen,
00038 utils::ConfigFile* params,
00039 utils::SymbolTable* globals)
00040 {
00041
OutputRoadSource* intf =
new OutputRoadSource();
00042
if (!intf->
init(*params, gen, globals)) {
00043
delete intf;
00044
return NULL;
00045 }
00046
return intf;
00047 }
00048
00051 RoadSource*
create_RoadSource_logger(
RoadSourceGenerator* gen,
00052 utils::ConfigFile* params,
00053 utils::SymbolTable* globals)
00054 {
00055
00056 utils::ConfigFile output_params;
00057 utils::ConfigFile::copy(*params, output_params);
00058 output_params.setString(
"tag",
"logger");
00059 output_params.set(
"contained",
"{}");
00060
00061
00062 utils::ConfigFile contained_params;
00063 params->getStruct(
"contained", contained_params);
00064
00065
00066 utils::ConfigFile final_params;
00067 final_params.setString(
"tag",
"output");
00068 final_params.setStruct(
"contained", contained_params);
00069 final_params.setStruct(
"output", output_params);
00070
00071
OutputRoadSource* intf =
new OutputRoadSource();
00072
if (!intf->
init(final_params, gen, globals)) {
00073
delete intf;
00074
return NULL;
00075 }
00076
return intf;
00077 }
00078
00081 RoadSource*
create_RoadSource_shmemPublish(
RoadSourceGenerator* gen,
00082 utils::ConfigFile* params,
00083 utils::SymbolTable* globals)
00084 {
00085
00086 utils::ConfigFile output_params;
00087 utils::ConfigFile::copy(*params, output_params);
00088 output_params.setString(
"tag",
"shmem");
00089 output_params.set(
"contained",
"{}");
00090
00091
00092 utils::ConfigFile contained_params;
00093 params->getStruct(
"contained", contained_params);
00094
00095
00096 utils::ConfigFile final_params;
00097 final_params.setString(
"tag",
"output");
00098 final_params.setStruct(
"contained", contained_params);
00099 final_params.setStruct(
"output", output_params);
00100
00101
OutputRoadSource* intf =
new OutputRoadSource();
00102
if (!intf->
init(final_params, gen, globals)) {
00103
delete intf;
00104
return NULL;
00105 }
00106
return intf;
00107 }
00108
00109 OutputRoadSource::OutputRoadSource()
00110 {
00111 _contained = NULL;
00112 _output = NULL;
00113 }
00114
00115 OutputRoadSource::~OutputRoadSource()
00116 {
00117
if (_contained)
00118 _contained->unref();
00119
if (_output)
00120 _output->unref();
00121 }
00122
00123 bool OutputRoadSource::init(utils::ConfigFile& params,
00124
RoadSourceGenerator* gen,
00125 utils::SymbolTable* globals)
00126 {
00127
00128 _contained = gen->
interface(params.getString(
"contained"), globals);
00129
if (!_contained) {
00130 cerr <<
"OutputRoadSource::init: could not create contained\n";
00131
return false;
00132 }
00133 _contained->ref();
00134
00135 _output =
RoadDest::generate(params.getString(
"output",
"default"), globals);
00136
if (!_output) {
00137 cerr <<
"OutputRoadSource::init: could not create output\n";
00138
return false;
00139 }
00140 _output->ref();
00141
00142
return true;
00143 }
00144
00145 bool OutputRoadSource::getPoints(utils::Time& time,
00146 std::vector<utils::Vec3d>& points,
00147
bool blocking)
00148 {
00149
if (_contained->
getPoints(time, points, blocking)) {
00150 _output->
outputPoints(time, points);
00151
return true;
00152 }
00153
return false;
00154 }