1 #include <vtestbed/config/real_type.hh> 2 #include <vtestbed/core/compartment.hh> 3 #include <vtestbed/guile/macros.hh> 4 #include <vtestbed/guile/traits.hh> 23 template <> SCM traits_type::type() { return ::type; }
33 auto* polyhedron_wrapper = get_wrapper<polyhedron_type>(polyhedron);
34 SCM name = SCM_UNDEFINED;
35 scm_c_bind_keyword_arguments(
"make-compartment", rest,
36 scm_t_keyword_arguments_flags{},
37 kw_name, &name, SCM_UNDEFINED);
38 auto* wrapper = make_wrapper<object_type>();
39 if (is_bound(name)) { wrapper->get()->name(to_string(name)); }
40 wrapper->get()->polyhedron(*polyhedron_wrapper->get());
41 return make_object<object_type>(traits_type::type(), wrapper);
55 auto* polyhedron_wrapper = get_wrapper<polyhedron_type>(hull);
56 auto size = to_vector<int,3>(nrooms);
57 auto&& rooms = compartment_array::generate(*polyhedron_wrapper->get(), size);
58 SCM s_rooms = SCM_EOL;
59 for (
auto& room : rooms) {
60 s_rooms = scm_cons(traits_type::make(std::move(room)), s_rooms);
62 s_rooms = scm_reverse(s_rooms);
67 traits_type::define() {
68 ::type = define_type<object_type>(
"<compartment>");
69 kw_name = scm_from_utf8_keyword(
"name");
70 define_procedure(
"make-compartment", 1, 0, 1, VTB_GUILE_2(
make_compartment));
71 define_procedure(
"generate-compartments", 2, 0, 0,
SCM make_compartment(SCM polyhedron, SCM rest)
Construct ship compartment using polyhedron and optional name.
SCM generate_compartments(SCM hull, SCM nrooms)
Generate ship compartments for hull using 3-d grid of size nrooms.