7 #ifndef __dg_command_bind_h__ 8 #define __dg_command_bind_h__ 23 #include "dynamic-graph/command.h" 24 #include <boost/assign/list_of.hpp> 25 #include <boost/bind.hpp> 26 #include <boost/function.hpp> 33 CommandVoid0(E &entity, boost::function<
void(
void)>
function,
34 const std::string &docString)
35 :
Command(entity, EMPTY_ARG, docString), fptr(
function) {}
45 boost::function<void(void)> fptr;
50 boost::function<
void(
void)>
function,
51 const std::string &docString) {
57 boost::function<
void(E *)>
function,
58 const std::string &docString) {
59 return new CommandVoid0<E>(entity, boost::bind(
function, &entity), docString);
64 const std::string &docString) {
65 return new CommandVoid0<E>(entity, boost::bind(
function, &entity), docString);
68 inline std::string docCommandVoid0(
const std::string &doc) {
69 return std::string(
"\n") + doc +
"\n\nNo input.\nVoid return.\n\n";
80 typedef boost::function<void(const T &)> function_t;
82 CommandVoid1(E &entity, function_t
function,
const std::string &docString)
99 template <
class E,
typename T>
101 makeCommandVoid1(E &entity, boost::function<
void(
const T &)>
function,
103 const std::string &docString) {
107 template <
class E,
typename T>
109 makeCommandVoid1(E &entity,
112 boost::function<
void(E *,
const T &)>
function,
113 const std::string &docString) {
118 template <
class E,
typename T>
120 const std::string &docString) {
126 inline std::string docCommandVoid1(
const std::string &doc,
127 const std::string &type) {
128 return std::string(
"\n") + doc +
"\n\nInput:\n - A " + type +
129 ".\nVoid return.\n\n";
139 template <
class E,
typename T1,
typename T2>
141 typedef boost::function<void(const T1 &, const T2 &)> function_t;
143 CommandVoid2(E &entity, function_t
function,
const std::string &docString)
163 template <
class E,
typename T1,
typename T2>
165 makeCommandVoid2(E &entity,
166 boost::function<
void(
const T1 &,
const T2 &)>
function,
167 const std::string &docString) {
171 template <
class E,
typename T1,
typename T2>
173 makeCommandVoid2(E &entity,
176 boost::function<
void(E *,
const T1 &,
const T2 &)>
function,
177 const std::string &docString) {
179 entity, boost::bind(
function, &entity, _1, _2), docString);
182 template <
class E,
typename T1,
typename T2>
184 makeCommandVoid2(E &entity,
void (E::*
function)(
const T1 &,
const T2 &),
185 const std::string &docString) {
187 entity, boost::bind(
function, &entity, _1, _2), docString);
191 inline std::string docCommandVoid2(
const std::string &doc,
192 const std::string &type1,
193 const std::string &type2) {
194 return (std::string(
"\n") + doc +
"\n\n" +
"Input:\n - A " + type1 +
".\n" +
195 "Input:\n - A " + type2 +
".\n" +
"Void return.\n\n");
205 template <
class E,
typename T1,
typename T2,
typename T3>
207 typedef boost::function<void(const T1 &, const T2 &, const T3 &)> function_t;
209 CommandVoid3(E &entity, function_t
function,
const std::string &docString)
222 fptr(val1, val2, val3);
230 template <
class E,
typename T1,
typename T2,
typename T3>
232 makeCommandVoid3(E &entity,
233 typename CommandVoid3<E, T1, T2, T3>::function_t
function,
234 const std::string &docString) {
238 template <
class E,
typename T1,
typename T2,
typename T3>
243 boost::function<
void(E *,
const T1 &,
const T2 &,
const T3 &)>
function,
244 const std::string &docString) {
246 entity, boost::bind(
function, &entity, _1, _2, _3), docString);
249 template <
class E,
typename T1,
typename T2,
typename T3>
251 makeCommandVoid3(E &entity,
252 void (E::*
function)(
const T1 &,
const T2 &,
const T3 &),
253 const std::string &docString) {
255 entity, boost::bind(
function, &entity, _1, _2, _3), docString);
259 inline std::string docCommandVoid3(
const std::string &doc,
260 const std::string &type1,
261 const std::string &type2,
262 const std::string &type3) {
263 return (std::string(
"\n") + doc +
"\n\n" +
"Input:\n - A " + type1 +
".\n" +
264 "Input:\n - A " + type2 +
".\n" +
"Input:\n - A " + type3 +
".\n" +
275 template <
class E,
typename T1,
typename T2,
typename T3,
typename T4>
277 typedef boost::function<void(const T1 &, const T2 &, const T3 &, const T4 &)>
279 typedef void (E::*memberFunction_ptr_t)(
const T1 &,
const T2 &,
const T3 &,
282 CommandVoid4(E &entity, function_t
function,
const std::string &docString)
297 fptr(val1, val2, val3, val4);
305 template <
class E,
typename T1,
typename T2,
typename T3,
typename T4>
307 makeCommandVoid4(E &entity,
308 typename CommandVoid4<E, T1, T2, T3, T4>::function_t
function,
309 const std::string &docString) {
313 template <
class E,
typename T1,
typename T2,
typename T3,
typename T4>
316 boost::function<
void(E *,
const T1 &,
const T2 &,
const T3 &,
const T4 &)>
318 const std::string &docString) {
320 entity, boost::bind(
function, &entity, _1, _2, _3, _4), docString);
323 template <
class E,
typename T1,
typename T2,
typename T3,
typename T4>
326 void (E::*
function)(
const T1 &,
const T2 &,
const T3 &,
const T4 &),
327 const std::string &docString) {
329 entity, boost::bind(
function, &entity, _1, _2, _3, _4), docString);
333 inline std::string docCommandVoid4(
const std::string &doc,
334 const std::string &type1,
335 const std::string &type2,
336 const std::string &type3,
337 const std::string &type4) {
338 return (std::string(
"\n") + doc +
"\n\n" +
"Input:\n - A " + type1 +
".\n" +
339 "Input:\n - A " + type2 +
".\n" +
"Input:\n - A " + type3 +
".\n" +
340 "Input:\n - A " + type4 +
".\n" +
"Void return.\n\n");
350 template <
class E,
typename T1,
typename T2,
typename T3,
typename T4,
typename T5>
352 typedef boost::function<void(const T1 &, const T2 &, const T3 &, const T4 &, const T5 &)>
354 typedef void (E::*memberFunction_ptr_t)(
const T1 &,
const T2 &,
const T3 &,
355 const T4 &,
const T5 &);
357 CommandVoid5(E &entity, function_t
function,
const std::string &docString)
373 fptr(val1, val2, val3, val4, val5);
381 template <
class E,
typename T1,
typename T2,
typename T3,
typename T4,
typename T5>
383 makeCommandVoid5(E &entity,
384 typename CommandVoid5<E, T1, T2, T3, T4, T5>::function_t
function,
385 const std::string &docString) {
389 template <
class E,
typename T1,
typename T2,
typename T3,
typename T4,
typename T5>
392 boost::function<
void(E *,
const T1 &,
const T2 &,
const T3 &,
const T4 &,
const T5 &)>
394 const std::string &docString) {
396 entity, boost::bind(
function, &entity, _1, _2, _3, _4, _5), docString);
399 template <
class E,
typename T1,
typename T2,
typename T3,
typename T4,
typename T5>
402 void (E::*
function)(
const T1 &,
const T2 &,
const T3 &,
const T4 &,
const T5 &),
403 const std::string &docString) {
405 entity, boost::bind(
function, &entity, _1, _2, _3, _4, _5), docString);
409 inline std::string docCommandVoid5(
const std::string &doc,
410 const std::string &type1,
411 const std::string &type2,
412 const std::string &type3,
413 const std::string &type4,
414 const std::string &type5) {
415 return (std::string(
"\n") + doc +
"\n\n" +
"Input:\n - A " + type1 +
".\n" +
416 "Input:\n - A " + type2 +
".\n" +
"Input:\n - A " + type3 +
".\n" +
417 "Input:\n - A " + type4 +
".\n" +
"Input:\n - A " + type5 +
".\n" +
428 template <
class E,
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
typename T6>
430 typedef boost::function<void(const T1 &, const T2 &, const T3 &, const T4 &, const T5 &, const T6 &)>
432 typedef void (E::*memberFunction_ptr_t)(
const T1 &,
const T2 &,
const T3 &,
433 const T4 &,
const T5 &,
const T6 &);
435 CommandVoid6(E &entity, function_t
function,
const std::string &docString)
453 fptr(val1, val2, val3, val4, val5, val6);
461 template <
class E,
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
typename T6>
463 makeCommandVoid6(E &entity,
464 typename CommandVoid6<E, T1, T2, T3, T4, T5, T6>::function_t
function,
465 const std::string &docString) {
469 template <
class E,
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
typename T6>
472 boost::function<
void(E *,
const T1 &,
const T2 &,
const T3 &,
const T4 &,
const T5 &,
const T6 &)>
474 const std::string &docString) {
476 entity, boost::bind(
function, &entity, _1, _2, _3, _4, _5, _6), docString);
479 template <
class E,
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
typename T6>
482 void (E::*
function)(
const T1 &,
const T2 &,
const T3 &,
const T4 &,
const T5 &,
const T6 &),
483 const std::string &docString) {
485 entity, boost::bind(
function, &entity, _1, _2, _3, _4, _5, _6), docString);
489 inline std::string docCommandVoid6(
const std::string &doc,
490 const std::string &type1,
491 const std::string &type2,
492 const std::string &type3,
493 const std::string &type4,
494 const std::string &type5,
495 const std::string &type6) {
496 return (std::string(
"\n") + doc +
"\n\n" +
"Input:\n - A " + type1 +
".\n" +
497 "Input:\n - A " + type2 +
".\n" +
"Input:\n - A " + type3 +
".\n" +
498 "Input:\n - A " + type4 +
".\n" +
"Input:\n - A " + type5 +
".\n" +
499 "Input:\n - A " + type6 +
".\n" +
"Void return.\n\n");
509 template <
class E,
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
typename T6,
typename T7>
511 typedef boost::function<void(const T1 &, const T2 &, const T3 &, const T4 &, const T5 &, const T6 &, const T7 &)>
513 typedef void (E::*memberFunction_ptr_t)(
const T1 &,
const T2 &,
const T3 &,
514 const T4 &,
const T5 &,
const T6 &,
517 CommandVoid7(E &entity, function_t
function,
const std::string &docString)
536 fptr(val1, val2, val3, val4, val5, val6, val7);
544 template <
class E,
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
typename T6,
typename T7>
546 makeCommandVoid7(E &entity,
547 typename CommandVoid7<E, T1, T2, T3, T4, T5, T6, T7>::function_t
function,
548 const std::string &docString) {
552 template <
class E,
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
typename T6,
typename T7>
555 boost::function<
void(E *,
const T1 &,
const T2 &,
const T3 &,
const T4 &,
const T5 &,
const T6 &,
const T7 &)>
557 const std::string &docString) {
559 entity, boost::bind(
function, &entity, _1, _2, _3, _4, _5, _6, _7), docString);
562 template <
class E,
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
typename T6,
typename T7>
565 void (E::*
function)(
const T1 &,
const T2 &,
const T3 &,
const T4 &,
const T5 &,
const T6 &,
const T7 &),
566 const std::string &docString) {
568 entity, boost::bind(
function, &entity, _1, _2, _3, _4, _5, _6, _7), docString);
572 inline std::string docCommandVoid7(
const std::string &doc,
573 const std::string &type1,
574 const std::string &type2,
575 const std::string &type3,
576 const std::string &type4,
577 const std::string &type5,
578 const std::string &type6,
579 const std::string &type7) {
580 return (std::string(
"\n") + doc +
"\n\n" +
"Input:\n - A " + type1 +
".\n" +
581 "Input:\n - A " + type2 +
".\n" +
"Input:\n - A " + type3 +
".\n" +
582 "Input:\n - A " + type4 +
".\n" +
"Input:\n - A " + type5 +
".\n" +
583 "Input:\n - A " + type6 +
".\n" +
"Input:\n - A " + type7 +
".\n" +
594 template <
class E,
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
typename T6,
typename T7,
typename T8>
596 typedef boost::function<void(const T1 &, const T2 &, const T3 &, const T4 &, const T5 &, const T6 &, const T7 &, const T8 &)>
598 typedef void (E::*memberFunction_ptr_t)(
const T1 &,
const T2 &,
const T3 &,
599 const T4 &,
const T5 &,
const T6 &,
600 const T7 &,
const T8 &);
602 CommandVoid8(E &entity, function_t
function,
const std::string &docString)
623 fptr(val1, val2, val3, val4, val5, val6, val7, val8);
631 template <
class E,
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
typename T6,
typename T7,
typename T8>
633 makeCommandVoid8(E &entity,
634 typename CommandVoid8<E, T1, T2, T3, T4, T5, T6, T7, T8>::function_t
function,
635 const std::string &docString) {
636 return new CommandVoid8<E, T1, T2, T3, T4, T5, T6, T7, T8>(entity,
function, docString);
639 template <
class E,
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
typename T6,
typename T7,
typename T8>
642 boost::function<
void(E *,
const T1 &,
const T2 &,
const T3 &,
const T4 &,
const T5 &,
const T6 &,
const T7 &,
const T8 &)>
644 const std::string &docString) {
646 entity, boost::bind(
function, &entity, _1, _2, _3, _4, _5, _6, _7, _8), docString);
649 template <
class E,
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
typename T6,
typename T7,
typename T8>
652 void (E::*
function)(
const T1 &,
const T2 &,
const T3 &,
const T4 &,
const T5 &,
const T6 &,
const T7 &,
const T8 &),
653 const std::string &docString) {
655 entity, boost::bind(
function, &entity, _1, _2, _3, _4, _5, _6, _7, _8), docString);
659 inline std::string docCommandVoid8(
const std::string &doc,
660 const std::string &type1,
661 const std::string &type2,
662 const std::string &type3,
663 const std::string &type4,
664 const std::string &type5,
665 const std::string &type6,
666 const std::string &type7,
667 const std::string &type8) {
668 return (std::string(
"\n") + doc +
"\n\n" +
"Input:\n - A " + type1 +
".\n" +
669 "Input:\n - A " + type2 +
".\n" +
"Input:\n - A " + type3 +
".\n" +
670 "Input:\n - A " + type4 +
".\n" +
"Input:\n - A " + type5 +
".\n" +
671 "Input:\n - A " + type6 +
".\n" +
"Input:\n - A " + type7 +
".\n" +
672 "Input:\n - A " + type8 +
".\n" +
"Void return.\n\n");
685 typedef boost::function<void(std::ostream &)> function_t;
687 CommandVerbose(E &entity, function_t
function,
const std::string &docString)
688 :
Command(entity, EMPTY_ARG, docString), fptr(
function) {}
693 std::ostringstream oss;
695 return Value(oss.str());
704 makeCommandVerbose(E &entity,
typename CommandVerbose<E>::function_t
function,
705 const std::string &docString) {
712 void (E::*
function)(std::ostream &),
713 const std::string &docString) {
719 inline std::string docCommandVerbose(
const std::string &doc) {
720 return std::string(
"\n") + doc +
"\n\nNo input.\n Return a string.\n\n";
726 template <
class E,
class ReturnType>
729 const std::string &docString)
730 :
Command(entity, EMPTY_ARG, docString), fptr(
function) {}
740 boost::function<ReturnType(void)> fptr;
743 template <
class E,
class ReturnType>
745 makeCommandReturnType0(E &entity, boost::function<ReturnType(
void)>
function,
746 const std::string &docString) {
750 template <
class E,
class ReturnType>
752 makeCommandReturnType0(E &entity, boost::function<ReturnType(E *)>
function,
753 const std::string &docString) {
755 entity, boost::bind(
function, &entity), docString);
758 template <
class E,
class ReturnType>
760 makeCommandReturnType0(E &entity, ReturnType (E::*
function)(
void),
761 const std::string &docString) {
763 entity, boost::bind(
function, &entity), docString);
766 template <
typename ReturnType>
768 docCommandReturnType0(
const std::string &doc,
769 const std::string & ) {
770 return std::string(
"\n") + doc +
"\n\nNo input.\n" +
771 typeid(ReturnType).name() +
" return.\n\n";
781 template <
class E,
typename ReturnType,
typename T>
783 typedef boost::function<ReturnType(const T &)> function_t;
786 const std::string &docString)
795 Value res(fptr(val));
803 template <
class E,
typename ReturnType,
typename T>
805 makeCommandReturnType1(E &entity,
806 boost::function<ReturnType(
const T &)>
function,
807 const std::string &docString) {
811 template <
class E,
typename ReturnType,
typename T>
813 makeCommandReturnType1(E &entity,
816 boost::function<ReturnType(E *,
const T &)>
function,
817 const std::string &docString) {
819 entity, boost::bind(
function, &entity, _1), docString);
822 template <
class E,
typename ReturnType,
typename T>
824 makeCommandReturnType1(E &entity, ReturnType (E::*
function)(
const T &),
825 const std::string &docString) {
827 entity, boost::bind(
function, &entity, _1), docString);
831 template <
typename ReturnType>
832 inline std::string docCommandReturnType1(
const std::string &doc,
833 const std::string &type) {
834 return std::string(
"\n") + doc +
"\n\nInput:\n - A " + type +
".\n" +
835 typeid(ReturnType).name() +
"return.\n\n";
845 template <
class E,
typename ReturnType,
typename T1,
typename T2>
847 typedef boost::function<ReturnType(const T1 &, const T2 &)> function_t;
850 const std::string &docString)
862 Value res(fptr(val1, val2));
870 template <
class E,
typename ReturnType,
typename T1,
typename T2>
872 E &entity, boost::function<ReturnType(
const T1 &,
const T2 &)>
function,
873 const std::string &docString) {
878 template <
class E,
typename ReturnType,
typename T1,
typename T2>
883 boost::function<ReturnType(E *,
const T1 &,
const T2 &)>
function,
884 const std::string &docString) {
886 entity, boost::bind(
function, &entity, _1, _2), docString);
889 template <
class E,
typename ReturnType,
typename T1,
typename T2>
891 makeCommandReturnType2(E &entity,
892 ReturnType (E::*
function)(
const T1 &,
const T2 &),
893 const std::string &docString) {
895 entity, boost::bind(
function, &entity, _1, _2), docString);
899 template <
typename ReturnType>
900 inline std::string docCommandReturnType2(
const std::string &doc,
901 const std::string &type1,
902 const std::string &type2) {
903 return (std::string(
"\n") + doc +
"\n\n" +
"Input:\n - A " + type1 +
".\n" +
904 "Input:\n - A " + type2 +
".\n" +
905 "ReturnType:\n - Returns:" +
typeid(ReturnType).name() + +
".\n\n");
911 #endif // __dg_command_bind_h__ virtual Value doExecute()
Specific action performed by the command.
Command(Entity &entity, const std::vector< Value::Type > &valueTypes, const std::string &docstring)
virtual Value doExecute()
Specific action performed by the command.
This class implements a variant design pattern to handle basic types in Command.
virtual Value doExecute()
Specific action performed by the command.
virtual Value doExecute()
Specific action performed by the command.
virtual Value doExecute()
Specific action performed by the command.
virtual Value doExecute()
Specific action performed by the command.
virtual Value doExecute()
Specific action performed by the command.
virtual Value doExecute()
Specific action performed by the command.
virtual Value doExecute()
Specific action performed by the command.
const std::vector< Value > & getParameterValues() const
Get parameter values.
virtual Value doExecute()
Specific action performed by the command.
virtual Value doExecute()
Specific action performed by the command.
virtual Value doExecute()
Specific action performed by the command.
virtual Value doExecute()
Specific action performed by the command.