Fix for x86_64 build fail
[platform/upstream/connectedhomeip.git] / src / lib / support / SafeString.h
1 /*
2  *
3  *    Copyright (c) 2021 Project CHIP Authors
4  *
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
8  *
9  *        http://www.apache.org/licenses/LICENSE-2.0
10  *
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.
16  */
17
18 /**
19  *    @file
20  *      Utilities for safely working with strings.
21  *
22  */
23
24 #pragma once
25
26 #include <support/CodeUtils.h>
27 #include <utility>
28
29 namespace chip {
30
31 /**
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
35  * strings.
36  *
37  * Do NOT pass things that are not string literals to this function.
38  *
39  * Use like:
40  *   constexpr size_t maxLen = MaxStringLength("abc", "defhij", "something");
41  */
42 constexpr size_t MaxStringLength()
43 {
44     return 0;
45 }
46
47 template <size_t FirstLength, typename... RestOfTypes>
48 constexpr size_t MaxStringLength(const char (&)[FirstLength], RestOfTypes &&... aArgs)
49 {
50     // Subtract 1 because we are not counting the null-terminator.
51     return max(FirstLength - 1, MaxStringLength(std::forward<RestOfTypes>(aArgs)...));
52 }
53
54 } // namespace chip