3 * Copyright (c) 2021 Project CHIP Authors
5 * Licensed under the Apache License, Version 2.0 (the "License");
6 * you may not use this file except in compliance with the License.
7 * You may obtain a copy of the License at
9 * http://www.apache.org/licenses/LICENSE-2.0
11 * Unless required by applicable law or agreed to in writing, software
12 * distributed under the License is distributed on an "AS IS" BASIS,
13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 * See the License for the specific language governing permissions and
15 * limitations under the License.
20 * Utilities for safely working with strings.
26 #include <support/CodeUtils.h>
32 * A function that determines, at compile time, the maximal length (not
33 * counting the null terminator) of a list of literal C strings. Suitable for
34 * determining sizes of buffers that might need to hold any of the given
37 * Do NOT pass things that are not string literals to this function.
40 * constexpr size_t maxLen = MaxStringLength("abc", "defhij", "something");
42 constexpr size_t MaxStringLength()
47 template <size_t FirstLength, typename... RestOfTypes>
48 constexpr size_t MaxStringLength(const char (&)[FirstLength], RestOfTypes &&... aArgs)
50 // Subtract 1 because we are not counting the null-terminator.
51 return max(FirstLength - 1, MaxStringLength(std::forward<RestOfTypes>(aArgs)...));