Pass Module by reference instead of shared ptr

This gives a small but noticeable compile time improvement as
well as a measurable, albeit not great, reduction in size of the
stdlib.
This commit is contained in:
Bjorn Fahller
2016-04-09 15:42:55 +02:00
parent 5567e767a3
commit 5ff97979fd
9 changed files with 301 additions and 344 deletions

View File

@@ -229,234 +229,201 @@ namespace chaiscript
template<typename T>
ModulePtr assign(ModulePtr m = std::make_shared<Module>())
Module& assign(Module& m)
{
m->add(chaiscript::fun(&detail::assign<T &, const T&>), "=");
return m;
return m.add(chaiscript::fun(&detail::assign<T &, const T&>), "=");
}
template<typename T>
ModulePtr assign_bitwise_and(ModulePtr m = std::make_shared<Module>())
Module& assign_bitwise_and(Module& m)
{
m->add(chaiscript::fun(&detail::assign_bitwise_and<T &, const T&>), "&=");
return m;
return m.add(chaiscript::fun(&detail::assign_bitwise_and<T &, const T&>), "&=");
}
template<typename T>
ModulePtr assign_xor(ModulePtr m = std::make_shared<Module>())
Module& assign_xor(Module& m)
{
m->add(chaiscript::fun(&detail::assign_xor<T &, const T&>), "^=");
return m;
return m.add(chaiscript::fun(&detail::assign_xor<T &, const T&>), "^=");
}
template<typename T>
ModulePtr assign_bitwise_or(ModulePtr m = std::make_shared<Module>())
Module& assign_bitwise_or(Module& m)
{
m->add(chaiscript::fun(&detail::assign_bitwise_or<T &, const T&>), "|=");
return m;
return m.add(chaiscript::fun(&detail::assign_bitwise_or<T &, const T&>), "|=");
}
template<typename T>
ModulePtr assign_difference(ModulePtr m = std::make_shared<Module>())
Module& assign_difference(Module& m)
{
m->add(chaiscript::fun(&detail::assign_difference<T &, const T&>), "-=");
return m;
return m.add(chaiscript::fun(&detail::assign_difference<T &, const T&>), "-=");
}
template<typename T>
ModulePtr assign_left_shift(ModulePtr m = std::make_shared<Module>())
Module& assign_left_shift(Module& m)
{
m->add(chaiscript::fun(&detail::assign_left_shift<T &, const T&>), "<<=");
return m;
return m.add(chaiscript::fun(&detail::assign_left_shift<T &, const T&>), "<<=");
}
template<typename T>
ModulePtr assign_product(ModulePtr m = std::make_shared<Module>())
Module& assign_product(Module& m)
{
m->add(chaiscript::fun(&detail::assign_product<T &, const T&>), "*=");
return m;
return m.add(chaiscript::fun(&detail::assign_product<T &, const T&>), "*=");
}
template<typename T>
ModulePtr assign_quotient(ModulePtr m = std::make_shared<Module>())
Module& assign_quotient(Module& m)
{
m->add(chaiscript::fun(&detail::assign_quotient<T &, const T&>), "/=");
return m;
return m.add(chaiscript::fun(&detail::assign_quotient<T &, const T&>), "/=");
}
template<typename T>
ModulePtr assign_remainder(ModulePtr m = std::make_shared<Module>())
Module& assign_remainder(Module& m)
{
m->add(chaiscript::fun(&detail::assign_remainder<T &, const T&>), "%=");
return m;
return m.add(chaiscript::fun(&detail::assign_remainder<T &, const T&>), "%=");
}
template<typename T>
ModulePtr assign_right_shift(ModulePtr m = std::make_shared<Module>())
Module& assign_right_shift(Module& m)
{
m->add(chaiscript::fun(&detail::assign_right_shift<T &, const T&>), ">>=");
return m;
return m.add(chaiscript::fun(&detail::assign_right_shift<T &, const T&>), ">>=");
}
template<typename T>
ModulePtr assign_sum(ModulePtr m = std::make_shared<Module>())
Module& assign_sum(Module& m)
{
m->add(chaiscript::fun(&detail::assign_sum<T &, const T&>), "+=");
return m;
return m.add(chaiscript::fun(&detail::assign_sum<T &, const T&>), "+=");
}
template<typename T>
ModulePtr prefix_decrement(ModulePtr m = std::make_shared<Module>())
Module& prefix_decrement(Module& m)
{
m->add(chaiscript::fun(&detail::prefix_decrement<T &>), "--");
return m;
return m.add(chaiscript::fun(&detail::prefix_decrement<T &>), "--");
}
template<typename T>
ModulePtr prefix_increment(ModulePtr m = std::make_shared<Module>())
Module& prefix_increment(Module& m)
{
m->add(chaiscript::fun(&detail::prefix_increment<T &>), "++");
return m;
return m.add(chaiscript::fun(&detail::prefix_increment<T &>), "++");
}
template<typename T>
ModulePtr equal(ModulePtr m = std::make_shared<Module>())
Module& equal(Module& m)
{
m->add(chaiscript::fun(&detail::equal<const T&, const T&>), "==");
return m;
return m.add(chaiscript::fun(&detail::equal<const T&, const T&>), "==");
}
template<typename T>
ModulePtr greater_than(ModulePtr m = std::make_shared<Module>())
Module& greater_than(Module& m)
{
m->add(chaiscript::fun(&detail::greater_than<const T&, const T&>), ">");
return m;
return m.add(chaiscript::fun(&detail::greater_than<const T&, const T&>), ">");
}
template<typename T>
ModulePtr greater_than_equal(ModulePtr m = std::make_shared<Module>())
Module& greater_than_equal(Module& m)
{
m->add(chaiscript::fun(&detail::greater_than_equal<const T&, const T&>), ">=");
return m;
return m.add(chaiscript::fun(&detail::greater_than_equal<const T&, const T&>), ">=");
}
template<typename T>
ModulePtr less_than(ModulePtr m = std::make_shared<Module>())
Module& less_than(Module& m)
{
m->add(chaiscript::fun(&detail::less_than<const T&, const T&>), "<");
return m;
return m.add(chaiscript::fun(&detail::less_than<const T&, const T&>), "<");
}
template<typename T>
ModulePtr less_than_equal(ModulePtr m = std::make_shared<Module>())
Module& less_than_equal(Module& m)
{
m->add(chaiscript::fun(&detail::less_than_equal<const T&, const T&>), "<=");
return m;
return m.add(chaiscript::fun(&detail::less_than_equal<const T&, const T&>), "<=");
}
template<typename T>
ModulePtr logical_compliment(ModulePtr m = std::make_shared<Module>())
Module& logical_compliment(Module& m)
{
m->add(chaiscript::fun(&detail::logical_compliment<const T &>), "!");
return m;
return m.add(chaiscript::fun(&detail::logical_compliment<const T &>), "!");
}
template<typename T>
ModulePtr not_equal(ModulePtr m = std::make_shared<Module>())
Module& not_equal(Module& m)
{
m->add(chaiscript::fun(&detail::not_equal<const T &, const T &>), "!=");
return m;
return m.add(chaiscript::fun(&detail::not_equal<const T &, const T &>), "!=");
}
template<typename T>
ModulePtr addition(ModulePtr m = std::make_shared<Module>())
Module& addition(Module& m)
{
m->add(chaiscript::fun(&detail::addition<const T &, const T &>), "+");
return m;
return m.add(chaiscript::fun(&detail::addition<const T &, const T &>), "+");
}
template<typename T>
ModulePtr unary_plus(ModulePtr m = std::make_shared<Module>())
Module& unary_plus(Module& m)
{
m->add(chaiscript::fun(&detail::unary_plus<const T &>), "+");
return m;
return m.add(chaiscript::fun(&detail::unary_plus<const T &>), "+");
}
template<typename T>
ModulePtr subtraction(ModulePtr m = std::make_shared<Module>())
Module& subtraction(Module& m)
{
m->add(chaiscript::fun(&detail::subtraction<const T &, const T &>), "-");
return m;
return m.add(chaiscript::fun(&detail::subtraction<const T &, const T &>), "-");
}
template<typename T>
ModulePtr unary_minus(ModulePtr m = std::make_shared<Module>())
Module& unary_minus(Module& m)
{
m->add(chaiscript::fun(&detail::unary_minus<const T &>), "-");
return m;
return m.add(chaiscript::fun(&detail::unary_minus<const T &>), "-");
}
template<typename T>
ModulePtr bitwise_and(ModulePtr m = std::make_shared<Module>())
Module& bitwise_and(Module& m)
{
m->add(chaiscript::fun(&detail::bitwise_and<const T &, const T &>), "&");
return m;
return m.add(chaiscript::fun(&detail::bitwise_and<const T &, const T &>), "&");
}
template<typename T>
ModulePtr bitwise_compliment(ModulePtr m = std::make_shared<Module>())
Module& bitwise_compliment(Module& m)
{
m->add(chaiscript::fun(&detail::bitwise_compliment<const T &>), "~");
return m;
return m.add(chaiscript::fun(&detail::bitwise_compliment<const T &>), "~");
}
template<typename T>
ModulePtr bitwise_xor(ModulePtr m = std::make_shared<Module>())
Module& bitwise_xor(Module& m)
{
m->add(chaiscript::fun(&detail::bitwise_xor<const T &, const T &>), "^");
return m;
return m.add(chaiscript::fun(&detail::bitwise_xor<const T &, const T &>), "^");
}
template<typename T>
ModulePtr bitwise_or(ModulePtr m = std::make_shared<Module>())
Module& bitwise_or(Module& m)
{
m->add(chaiscript::fun(&detail::bitwise_or<const T &, const T &>), "|");
return m;
return m.add(chaiscript::fun(&detail::bitwise_or<const T &, const T &>), "|");
}
template<typename T>
ModulePtr division(ModulePtr m = std::make_shared<Module>())
Module& division(Module& m)
{
m->add(chaiscript::fun(&detail::division<const T &, const T &>), "/");
return m;
return m.add(chaiscript::fun(&detail::division<const T &, const T &>), "/");
}
template<typename T>
ModulePtr left_shift(ModulePtr m = std::make_shared<Module>())
Module& left_shift(Module& m)
{
m->add(chaiscript::fun(&detail::left_shift<const T &, const T &>), "<<");
return m;
return m.add(chaiscript::fun(&detail::left_shift<const T &, const T &>), "<<");
}
template<typename T>
ModulePtr multiplication(ModulePtr m = std::make_shared<Module>())
Module& multiplication(Module& m)
{
m->add(chaiscript::fun(&detail::multiplication<const T &, const T &>), "*");
return m;
return m.add(chaiscript::fun(&detail::multiplication<const T &, const T &>), "*");
}
template<typename T>
ModulePtr remainder(ModulePtr m = std::make_shared<Module>())
Module& remainder(Module& m)
{
m->add(chaiscript::fun(&detail::remainder<const T &, const T &>), "%");
return m;
return m.add(chaiscript::fun(&detail::remainder<const T &, const T &>), "%");
}
template<typename T>
ModulePtr right_shift(ModulePtr m = std::make_shared<Module>())
Module& right_shift(Module& m)
{
m->add(chaiscript::fun(&detail::right_shift<const T &, const T &>), ">>");
return m;
return m.add(chaiscript::fun(&detail::right_shift<const T &, const T &>), ">>");
}
}
}