| 2694 | |
| 2695 | template <class T> |
| 2696 | void transform_delegate (const T &tr, db::ArrayRepository *array_rep) |
| 2697 | { |
| 2698 | // transform the delegate |
| 2699 | if (! array_rep && ! mp_base->in_repository) { |
| 2700 | |
| 2701 | // special case: allow in-place transformation |
| 2702 | mp_base->transform (tr); |
| 2703 | |
| 2704 | } else { |
| 2705 | |
| 2706 | basic_array <coord_type> *new_base = mp_base->clone (); |
| 2707 | new_base->transform (tr); |
| 2708 | |
| 2709 | if (! mp_base->in_repository) { |
| 2710 | delete mp_base; |
| 2711 | } |
| 2712 | |
| 2713 | if (array_rep) { |
| 2714 | mp_base = array_rep->insert (*new_base); |
| 2715 | delete new_base; |
| 2716 | } else { |
| 2717 | mp_base = new_base; |
| 2718 | } |
| 2719 | |
| 2720 | } |
| 2721 | } |
| 2722 | }; |
| 2723 | |
| 2724 | /** |