source: flair-src/trunk/lib/FlairMeta/src/UgvFactory.cpp @ 378

Last change on this file since 378 was 378, checked in by Sanahuja Guillaume, 10 months ago

up ugv

  • Property svn:eol-style set to native
File size: 1.7 KB
Line 
1// %flair:license{
2// This file is part of the Flair framework distributed under the
3// CECILL-C License, Version 1.0.
4// %flair:license}
5//  created:    2020/12/16
6//  filename:   UgvFactory.cpp
7//
8//  author:     Guillaume Sanahuja
9//              Copyright Heudiasyc UMR UTC/CNRS 7253
10//
11//  version:    $Id: $
12//
13//  purpose:   construct a Ugv based on the type name
14//
15//
16/*********************************************************************/
17
18#include "UgvFactory.h"
19#include "FrameworkManager.h"
20#include "SimuUgv.h"
21#include "SumoUgv.h"
22
23
24using namespace std;
25using namespace flair::core;
26using namespace flair::meta;
27
28namespace { // anonymous
29     vector<flair::meta::Ugv* (*)(string,string,string)> *vectoroffunctions=NULL;
30}
31
32
33Ugv *CreateUgv(string name, string type,string options) {
34
35  Ugv *ugv;
36
37  if(vectoroffunctions!=NULL) {
38    for(int i=0;i<vectoroffunctions->size();i++) {
39      ugv=vectoroffunctions->at(i)(name,type,options);
40      if(ugv!=NULL) {
41        free(vectoroffunctions);
42        vectoroffunctions=NULL;
43        return ugv;
44      }
45    }
46  }
47
48#ifdef CORE2_64
49  if (type.compare(0, 8, "ugv_simu") == 0) {
50    int simu_id = 0;
51    if (type.size() > 8) {
52      simu_id = atoi(type.substr(8, type.size() - 8).c_str());
53    }
54    return new SimuUgv(name, simu_id);
55  } else if (type.compare(0, 4, "sumo") == 0) {
56    return new SumoUgv(name);
57  } else {
58    getFrameworkManager()->Err("UGV type %s unknown\n", type.c_str());
59    return NULL;
60  }
61#endif
62}
63
64void RegisterUgvCreator(flair::meta::Ugv*(*func)(string,string,string)) {
65  if(vectoroffunctions==NULL) vectoroffunctions=(vector<flair::meta::Ugv* (*)(string,string,string)>*)malloc(sizeof(vector<flair::meta::Ugv* (*)(string,string,string)>));
66
67  vectoroffunctions->push_back(func);
68}
Note: See TracBrowser for help on using the repository browser.