shared
Brett 2024-08-20 13:52:06 -04:00
parent 82b8c82768
commit 17a2805ef1
6 changed files with 21 additions and 30 deletions

View File

@ -1,5 +1,5 @@
cmake_minimum_required(VERSION 3.25) cmake_minimum_required(VERSION 3.25)
project(blt-gp VERSION 0.1.14) project(blt-gp VERSION 0.1.15)
include(CTest) include(CTest)

View File

@ -102,18 +102,6 @@ int main()
type_system.register_type<float>(); type_system.register_type<float>();
blt::gp::operator_builder<context> builder{type_system}; blt::gp::operator_builder<context> builder{type_system};
// builder.add_operator(add);
// builder.add_operator(sub);
// builder.add_operator(mul);
// builder.add_operator(pro_div);
// builder.add_operator(op_sin);
// builder.add_operator(op_cos);
// builder.add_operator(op_exp);
// builder.add_operator(op_log);
//
// builder.add_operator(lit, true);
// builder.add_operator(op_x);
program.set_operations(builder.build(add, sub, mul, pro_div, op_sin, op_cos, op_exp, op_log, lit, op_x)); program.set_operations(builder.build(add, sub, mul, pro_div, op_sin, op_cos, op_exp, op_log, lit, op_x));
BLT_DEBUG("Generate Initial Population"); BLT_DEBUG("Generate Initial Population");

View File

@ -57,7 +57,7 @@ namespace blt::gp
class operator_storage_test; class operator_storage_test;
// context*, read stack, write stack // context*, read stack, write stack
//using callable_t = std::function<void(void*, stack_allocator&, stack_allocator&, bitmask_t*)>; using operator_func_t = std::function<void(void*, stack_allocator&, stack_allocator&)>;
using eval_func_t = std::function<evaluation_context(const tree_t& tree, void* context)>; using eval_func_t = std::function<evaluation_context(const tree_t& tree, void* context)>;
// debug function, // debug function,
using print_func_t = std::function<void(std::ostream&, stack_allocator&)>; using print_func_t = std::function<void(std::ostream&, stack_allocator&)>;

View File

@ -187,21 +187,21 @@ namespace blt::gp
} }
} }
// template<typename Context> template<typename Context>
// [[nodiscard]] detail::callable_t make_callable() const [[nodiscard]] detail::operator_func_t make_callable() const
// { {
// return [this](void* context, stack_allocator& read_allocator, stack_allocator& write_allocator, detail::bitmask_t* mask) { return [this](void* context, stack_allocator& read_allocator, stack_allocator& write_allocator) {
// if constexpr (detail::is_same_v<Context, detail::remove_cv_ref<typename detail::first_arg<Args...>::type>>) if constexpr (detail::is_same_v<Context, detail::remove_cv_ref<typename detail::first_arg<Args...>::type>>)
// { {
// // first arg is context // first arg is context
// write_allocator.push(this->operator()(context, read_allocator, mask)); write_allocator.push(this->operator()(context, read_allocator, nullptr));
// } else } else
// { {
// // first arg isn't context // first arg isn't context
// write_allocator.push(this->operator()(read_allocator, mask)); write_allocator.push(this->operator()(read_allocator, nullptr));
// } }
// }; };
// } }
[[nodiscard]] inline constexpr std::optional<std::string_view> get_name() const [[nodiscard]] inline constexpr std::optional<std::string_view> get_name() const
{ {

View File

@ -75,6 +75,8 @@ namespace blt::gp
type_id return_type; type_id return_type;
// number of arguments for this operator // number of arguments for this operator
argc_t argc; argc_t argc;
// per operator function callable (slow)
detail::operator_func_t func;
}; };
struct operator_storage struct operator_storage
@ -225,6 +227,7 @@ namespace blt::gp
info.argc.argc_context = info.argc.argc = sizeof...(Args); info.argc.argc_context = info.argc.argc = sizeof...(Args);
info.return_type = return_type_id; info.return_type = return_type_id;
info.func = op.template make_callable<Context>();
((std::is_same_v<detail::remove_cv_ref<Args>, Context> ? info.argc.argc -= 1 : (blt::size_t) nullptr), ...); ((std::is_same_v<detail::remove_cv_ref<Args>, Context> ? info.argc.argc -= 1 : (blt::size_t) nullptr), ...);

View File

@ -70,7 +70,7 @@ namespace blt::gp
if (args.program.is_static(top.id)) if (args.program.is_static(top.id))
{ {
//info.function(nullptr, tree.get_values(), tree.get_values(), nullptr); info.func(nullptr, tree.get_values(), tree.get_values());
continue; continue;
} }