| // Copyright 2014 The Crashpad Authors. All rights reserved. |
| // |
| // Licensed under the Apache License, Version 2.0 (the "License"); |
| // you may not use this file except in compliance with the License. |
| // You may obtain a copy of the License at |
| // |
| // http://www.apache.org/licenses/LICENSE-2.0 |
| // |
| // Unless required by applicable law or agreed to in writing, software |
| // distributed under the License is distributed on an "AS IS" BASIS, |
| // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| // See the License for the specific language governing permissions and |
| // limitations under the License. |
| |
| // This file is intended to be included multiple times in the same translation |
| // unit, so #include guards are intentionally absent. |
| // |
| // This file is included by snapshot/mac/process_types.h and |
| // snapshot/mac/process_types/internal.h to produce traits class definitions. |
| |
| // Things that #include this file should #undef |
| // DECLARE_PROCESS_TYPE_TRAITS_CLASS before #including this file again and after |
| // the last #include of this file. |
| // |
| // |Reserved*| is used for padding fields that may be zero-length, and |Nothing| |
| // is always zero-length and is used solely as an anchor to compute offsets. |
| // __VA_ARGS__, which is intended to set the alignment of the 64-bit types, is |
| // not used for those type aliases. |
| #define DECLARE_PROCESS_TYPE_TRAITS_CLASS(traits_name, lp_bits, ...) \ |
| namespace crashpad { \ |
| namespace process_types { \ |
| namespace internal { \ |
| struct Traits##traits_name { \ |
| using Long = int##lp_bits##_t __VA_ARGS__; \ |
| using ULong = uint##lp_bits##_t __VA_ARGS__; \ |
| using Pointer = uint##lp_bits##_t __VA_ARGS__; \ |
| using IntPtr = int##lp_bits##_t __VA_ARGS__; \ |
| using UIntPtr = uint##lp_bits##_t __VA_ARGS__; \ |
| using Reserved32_32Only = Reserved32_32Only##lp_bits; \ |
| using Reserved32_64Only = Reserved32_64Only##lp_bits; \ |
| using Reserved64_64Only = Reserved64_64Only##lp_bits; \ |
| using Nothing = Nothing; \ |
| }; \ |
| } \ |
| } \ |
| } |