| 555 | |
| 556 | template <class F> |
| 557 | auto DispatchByLayout(Layout type, F f) |
| 558 | -> decltype(f.template operator()<Layout::UNKNOWN>()) { |
| 559 | switch (type) { |
| 560 | case Layout::HW: |
| 561 | return f.template operator()<Layout::HW>(); |
| 562 | case Layout::HWC: |
| 563 | return f.template operator()<Layout::HWC>(); |
| 564 | case Layout::CHW: |
| 565 | return f.template operator()<Layout::CHW>(); |
| 566 | case Layout::OIHW: |
| 567 | return f.template operator()<Layout::OIHW>(); |
| 568 | case Layout::IOHW: |
| 569 | return f.template operator()<Layout::IOHW>(); |
| 570 | case Layout::OHWI: |
| 571 | return f.template operator()<Layout::OHWI>(); |
| 572 | case Layout::IHWO: |
| 573 | return f.template operator()<Layout::IHWO>(); |
| 574 | case Layout::LINEAR: |
| 575 | return f.template operator()<Layout::LINEAR>(); |
| 576 | case Layout::SCALAR: |
| 577 | return f.template operator()<Layout::SCALAR>(); |
| 578 | case Layout::BHWC: |
| 579 | return f.template operator()<Layout::BHWC>(); |
| 580 | case Layout::UNKNOWN: |
| 581 | return f.template operator()<Layout::UNKNOWN>(); |
| 582 | } |
| 583 | } |
| 584 | |
| 585 | template <Layout T> |
| 586 | constexpr int Size() { |