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>
86 virtual void process(
const std::string& parameter, luabind::object
const& parameters)
88 luabind::object tableEntry = parameters[parameter];
89 if (tableEntry.is_valid())
91 if (luabind::type(tableEntry) != LUA_TNIL)
93 myValue = luabind::object_cast<_Container>(tableEntry);
132 template <
typename _Container>
155 virtual void process(
const std::string& parameter, luabind::object
const& parameters)
157 luabind::object tableEntry = parameters[parameter];
158 if (tableEntry.is_valid())
160 if (luabind::type(tableEntry) == LUA_TTABLE)
162 for (luabind::iterator paramItr(tableEntry), end; paramItr != end; ++paramItr)
164 _Container
value = luabind::object_cast<_Container>(*paramItr);
165 this->
myValue.push_back(value);
176 template <
typename _Container>
213 for (luabind::iterator paramItr(tableEntry), end; paramItr != end; ++paramItr)
235 if (luabind::type(*paramItr) == LUA_TSTRING)
237 createdRw =
new DtRwString(luabind::object_cast<std::string>(paramItr.key()).c_str(), parentReg);
239 ((
DtRwString&)*createdRw) = luabind::object_cast<std::string>(*paramItr).c_str();
241 else if (luabind::type(*paramItr) == LUA_TNUMBER)
243 createdRw =
new DtRwReal(luabind::object_cast<std::string>(paramItr.key()).c_str(), parentReg);
245 ((
DtRwReal&)*createdRw) = luabind::object_cast<
double>(*paramItr);
247 else if (luabind::type(*paramItr) == LUA_TTABLE)
259 createdRw->
setName(luabind::object_cast<std::string>(paramItr.key()).c_str());
272 virtual void process(
const std::string& parameter, luabind::object
const& parameters)
277 luabind::object tableEntry = parameters[parameter];
278 if (tableEntry.is_valid())
280 if (luabind::type(tableEntry) == LUA_TTABLE)
313 virtual void process(
const std::string& parameter, luabind::object
const& parameters)
315 luabind::object tableEntry = parameters[parameter];
316 if (tableEntry.is_valid())
318 if (luabind::type(tableEntry) == LUA_TNUMBER)
323 else if (luabind::type(tableEntry) != LUA_TNIL)
325 myValue =
DtString(luabind::object_cast<std::string>(tableEntry).c_str());
376 void removeVariableParameter(
const std::string&);
378 template <
typename _Container>
void addVariableParameter(
const std::string& s)
384 template <
typename _Container>
void addRequiredVariableParameter(
const std::string& s)
389 template <
typename _Container>
void addVariableParameterVector(
const std::string& s)
394 template <
typename _Container>
void addRequiredVariableParameterVector(
const std::string& s)
399 template <
typename _Container>
void addVariableParameterReaderWriter(
const std::string& s)
404 template <
typename _Container>
void addRequiredVariableParameterReaderWriter(
const std::string& s)
409 template <
typename _Container> _Container value(
const std::string& key)
const
411 VariableParameters::const_iterator iter = myVariableParameters.find(key);
413 if (iter != myVariableParameters.end())
421 template <
typename _Container> _Container* valuePointer(
const std::string& key)
const
423 VariableParameters::const_iterator iter = myVariableParameters.find(key);
425 if (iter != myVariableParameters.end())
433 template <
typename _Container>
void set(
const std::string& key,
const _Container& value)
435 VariableParameters::iterator iter = myVariableParameters.find(key);
437 if (iter != myVariableParameters.end())
444 virtual bool valueIsSpecified(
const std::string&)
const;
447 template <
typename _Container>
448 std::vector<_Container> valueToStdVector(
const std::string& key)
const
450 std::vector<_Container> results;
451 luabind::object
object = value<luabind::object>(key);
453 if (luabind::type(
object) == LUA_TTABLE)
455 for (luabind::iterator paramItr(
object), end; paramItr != end; ++paramItr)
457 if (luabind::type(*paramItr) == LUA_TUSERDATA)
461 results.push_back(static_cast<_Container>(so->getUUID()));
465 results.push_back(luabind::object_cast<_Container>(*paramItr));
470 results.push_back(luabind::object_cast<_Container>(*paramItr));
474 else if (luabind::type(
object) == LUA_TSTRING)
476 results.push_back(luabind::object_cast<_Container>(
object));
478 else if (luabind::type(
object) == LUA_TUSERDATA)
482 results.push_back(static_cast<_Container>(so->getUUID()));
486 results.push_back(luabind::object_cast<_Container>(
object));
493 template <
typename _Container>
494 std::set<_Container> valueToStdSet(
const std::string& key)
const
496 std::set<_Container> results;
497 luabind::object
object = value<luabind::object>(key);
499 if (luabind::type(
object) == LUA_TTABLE)
501 for (luabind::iterator paramItr(
object), end; paramItr != end; ++paramItr)
503 if (luabind::type(*paramItr) == LUA_TUSERDATA)
507 results.insert(static_cast<_Container>(so->getUUID()));
511 results.insert(luabind::object_cast<_Container>(*paramItr));
516 results.insert(luabind::object_cast<_Container>(*paramItr));
520 else if (luabind::type(
object) == LUA_TSTRING)
522 results.insert(luabind::object_cast<_Container>(
object));
524 else if (luabind::type(
object) == LUA_TUSERDATA)
528 results.insert(static_cast<_Container>(so->getUUID()));
532 results.insert(luabind::object_cast<_Container>(
object));
541 virtual void process(luabind::object
const& parameters);
550 inline void DtVariableParameterBuilder::addVariableParameter<DtScriptVrfObject>(
const std::string& s)
556 inline DtScriptVrfObject DtVariableParameterBuilder::value<DtScriptVrfObject>(
const std::string& key)
const
558 VariableParameters::const_iterator iter = myVariableParameters.find(key);
560 if (iter != myVariableParameters.end())