1 // Copyright 2020 The Pigweed Authors 2 // 3 // Licensed under the Apache License, Version 2.0 (the "License"); you may not 4 // use this file except in compliance with the License. You may obtain a copy of 5 // the License at 6 // 7 // https://www.apache.org/licenses/LICENSE-2.0 8 // 9 // Unless required by applicable law or agreed to in writing, software 10 // distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 11 // WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 12 // License for the specific language governing permissions and limitations under 13 // the License. 14 15 #include "pw_rpc/service.h" 16 17 #include <cstddef> 18 #include <type_traits> 19 20 namespace pw::rpc { 21 FindMethod(uint32_t method_id) const22const internal::Method* Service::FindMethod(uint32_t method_id) const { 23 const internal::MethodUnion* method_impl = methods_; 24 25 for (size_t i = 0; i < method_count_; ++i) { 26 const internal::Method* method = &method_impl->method(); 27 if (method->id() == method_id) { 28 return method; 29 } 30 31 const auto raw = reinterpret_cast<const std::byte*>(method_impl); 32 method_impl = 33 reinterpret_cast<const internal::MethodUnion*>(raw + method_size_); 34 } 35 36 return nullptr; 37 } 38 39 } // namespace pw::rpc 40