| 625 | } |
| 626 | |
| 627 | static void unserialize_list_material(color_ostream& out, const char* subcat, bool all, char val, const vector<string>& filters, |
| 628 | FuncMaterialAllowed is_allowed, FuncReadImport read_value, int32_t list_size, |
| 629 | vector<char>& pile_list) { |
| 630 | // we initialize all disallowed values to 1 |
| 631 | // why? because that's how the memory is in DF before we muck with it. |
| 632 | size_t num_elems = world->raws.inorganics.all.size(); |
| 633 | pile_list.resize(num_elems, 0); |
| 634 | for (size_t i = 0; i < pile_list.size(); ++i) { |
| 635 | MaterialInfo mi(0, i); |
| 636 | if (!is_allowed(mi)) |
| 637 | pile_list.at(i) = 1; |
| 638 | } |
| 639 | |
| 640 | if (all) { |
| 641 | for (size_t idx = 0; idx < num_elems; ++idx) { |
| 642 | MaterialInfo mi; |
| 643 | mi.decode(0, idx); |
| 644 | set_filter_elem(out, subcat, filters, val, mi.toString(), idx, pile_list.at(idx)); |
| 645 | } |
| 646 | return; |
| 647 | } |
| 648 | |
| 649 | for (auto i = 0; i < list_size; ++i) { |
| 650 | string id = read_value(i); |
| 651 | MaterialInfo mi; |
| 652 | if (!mi.find(id) || !is_allowed(mi)) |
| 653 | continue; |
| 654 | if (mi.index < 0 || size_t(mi.index) >= pile_list.size()) { |
| 655 | WARN(log, out).print("material type index invalid: {}\n", mi.index); |
| 656 | continue; |
| 657 | } |
| 658 | set_filter_elem(out, subcat, filters, val, id, mi.index, pile_list.at(mi.index)); |
| 659 | } |
| 660 | } |
| 661 | |
| 662 | static bool serialize_list_creature(color_ostream& out, FuncWriteExport add_value, const vector<char>& list) { |
| 663 | bool all = true; |
no test coverage detected