15 #include <vlutil/vlString.h>
23 #include <luabind/luabind.hpp>
44 virtual void process(
const std::string&, luabind::object
const& parameters) = 0;
47 virtual bool isValid()
const = 0;
50 virtual bool specified()
const = 0;
53 template <
typename _Container>
79 virtual void process(
const std::string& parameter, luabind::object
const& parameters)
81 luabind::object tableEntry = parameters[parameter];
82 if (tableEntry.is_valid())
84 if (luabind::type(tableEntry) != LUA_TNIL)
86 myValue = luabind::object_cast<_Container>(tableEntry);
125 template <
typename _Container>
148 virtual void process(
const std::string& parameter, luabind::object
const& parameters)
150 luabind::object tableEntry = parameters[parameter];
151 if (tableEntry.is_valid())
153 if (luabind::type(tableEntry) == LUA_TTABLE)
155 for (luabind::iterator paramItr(tableEntry), end; paramItr != end; ++paramItr)
157 _Container
value = luabind::object_cast<_Container>(*paramItr);
158 this->
myValue.push_back(value);
169 template <
typename _Container>
206 for (luabind::iterator paramItr(tableEntry), end; paramItr != end; ++paramItr)
228 if (luabind::type(*paramItr) == LUA_TSTRING)
230 createdRw =
new DtRwString(luabind::object_cast<std::string>(paramItr.key()).c_str(), parentReg);
232 ((
DtRwString&)*createdRw) = luabind::object_cast<std::string>(*paramItr).c_str();
234 else if (luabind::type(*paramItr) == LUA_TNUMBER)
236 createdRw =
new DtRwReal(luabind::object_cast<std::string>(paramItr.key()).c_str(), parentReg);
238 ((
DtRwReal&)*createdRw) = luabind::object_cast<
double>(*paramItr);
240 else if (luabind::type(*paramItr) == LUA_TTABLE)
252 createdRw->
setName(luabind::object_cast<std::string>(paramItr.key()).c_str());
265 virtual void process(
const std::string& parameter, luabind::object
const& parameters)
270 luabind::object tableEntry = parameters[parameter];
271 if (tableEntry.is_valid())
273 if (luabind::type(tableEntry) == LUA_TTABLE)
306 virtual void process(
const std::string& parameter, luabind::object
const& parameters)
308 luabind::object tableEntry = parameters[parameter];
309 if (tableEntry.is_valid())
311 if (luabind::type(tableEntry) == LUA_TNUMBER)
316 else if (luabind::type(tableEntry) != LUA_TNIL)
318 myValue =
DtString(luabind::object_cast<std::string>(tableEntry).c_str());
344 void removeVariableParameter(
const std::string&);
346 template <
typename _Container>
void addVariableParameter(
const std::string& s)
351 template <
typename _Container>
void addRequiredVariableParameter(
const std::string& s)
356 template <
typename _Container>
void addVariableParameterVector(
const std::string& s)
361 template <
typename _Container>
void addRequiredVariableParameterVector(
const std::string& s)
366 template <
typename _Container>
void addVariableParameterReaderWriter(
const std::string& s)
371 template <
typename _Container>
void addRequiredVariableParameterReaderWriter(
const std::string& s)
376 template <
typename _Container> _Container value(
const std::string& key)
const
378 VariableParameters::const_iterator iter = myVariableParameters.find(key);
380 if (iter != myVariableParameters.end())
388 template <
typename _Container> _Container* valuePointer(
const std::string& key)
const
390 VariableParameters::const_iterator iter = myVariableParameters.find(key);
392 if (iter != myVariableParameters.end())
400 template <
typename _Container>
void set(
const std::string& key,
const _Container& value)
402 VariableParameters::iterator iter = myVariableParameters.find(key);
404 if (iter != myVariableParameters.end())
411 virtual bool valueIsSpecified(
const std::string&)
const;
414 template <
typename _Container>
415 std::vector<_Container> valueToStdVector(
const std::string& key)
const
417 std::vector<_Container> results;
418 luabind::object
object = value<luabind::object>(key);
420 if (luabind::type(
object) == LUA_TTABLE)
422 for (luabind::iterator paramItr(
object), end; paramItr != end; ++paramItr)
424 if (luabind::type(*paramItr) == LUA_TUSERDATA)
428 results.push_back(static_cast<_Container>(so->getUUID()));
432 results.push_back(luabind::object_cast<_Container>(*paramItr));
437 results.push_back(luabind::object_cast<_Container>(*paramItr));
441 else if (luabind::type(
object) == LUA_TSTRING)
443 results.push_back(luabind::object_cast<_Container>(
object));
445 else if (luabind::type(
object) == LUA_TUSERDATA)
449 results.push_back(static_cast<_Container>(so->getUUID()));
453 results.push_back(luabind::object_cast<_Container>(
object));
460 template <
typename _Container>
461 std::set<_Container> valueToStdSet(
const std::string& key)
const
463 std::set<_Container> results;
464 luabind::object
object = value<luabind::object>(key);
466 if (luabind::type(
object) == LUA_TTABLE)
468 for (luabind::iterator paramItr(
object), end; paramItr != end; ++paramItr)
470 if (luabind::type(*paramItr) == LUA_TUSERDATA)
474 results.insert(static_cast<_Container>(so->getUUID()));
478 results.insert(luabind::object_cast<_Container>(*paramItr));
483 results.insert(luabind::object_cast<_Container>(*paramItr));
487 else if (luabind::type(
object) == LUA_TSTRING)
489 results.insert(luabind::object_cast<_Container>(
object));
491 else if (luabind::type(
object) == LUA_TUSERDATA)
495 results.insert(static_cast<_Container>(so->getUUID()));
499 results.insert(luabind::object_cast<_Container>(
object));
508 virtual void process(luabind::object
const& parameters);