1 /* 2 * Copyright (C) 2021 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 #ifndef INCLUDE_PERFETTO_TRACING_TRACED_VALUE_FORWARD_H_ 18 #define INCLUDE_PERFETTO_TRACING_TRACED_VALUE_FORWARD_H_ 19 20 namespace perfetto { 21 22 class TracedValue; 23 class TracedArray; 24 class TracedDictionary; 25 26 template <typename T> 27 void WriteIntoTracedValue(TracedValue context, T&& value); 28 29 template <typename T, class = void> 30 struct TraceFormatTraits; 31 32 // Write support checker to allow it to be used when matching. 33 // 34 // Intended to be used for types like smart pointers, who should support 35 // AsTracedValueInto only iff their inner type supports being written into 36 // a TracedValue. 37 // 38 // template <typename T> 39 // class SmartPtr { 40 // ... 41 // 42 // typename check_traced_value_support<T, void>::value 43 // AsTracedValueInto(perfetto::TracedValue context) const { 44 // WriteIntoTracedValue(std::move(context), *ptr_); 45 // } 46 // }; 47 template <typename T, typename ResultType = void, class = void> 48 struct check_traced_value_support; 49 50 } // namespace perfetto 51 52 #endif // INCLUDE_PERFETTO_TRACING_TRACED_VALUE_FORWARD_H_ 53