Home | History | Annotate | Download | only in ipc
      1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
      2 // Use of this source code is governed by a BSD-style license that can be
      3 // found in the LICENSE file.
      4 
      5 #ifndef IPC_PARAM_TRAITS_MACROS_H_
      6 #define IPC_PARAM_TRAITS_MACROS_H_
      7 
      8 #include <string>
      9 
     10 // Traits generation for structs.
     11 #define IPC_STRUCT_TRAITS_BEGIN(struct_name) \
     12   namespace IPC { \
     13     template <> \
     14     struct IPC_MESSAGE_EXPORT ParamTraits<struct_name> { \
     15       typedef struct_name param_type; \
     16       static void Write(Message* m, const param_type& p); \
     17       static bool Read(const Message* m, PickleIterator* iter, param_type* p); \
     18       static void Log(const param_type& p, std::string* l); \
     19     }; \
     20   }
     21 
     22 #define IPC_STRUCT_TRAITS_MEMBER(name)
     23 #define IPC_STRUCT_TRAITS_PARENT(type)
     24 #define IPC_STRUCT_TRAITS_END()
     25 
     26 // Convenience macro for defining enumerated type traits for types which are
     27 // not range-checked by the IPC system. The author of the message handlers
     28 // is responsible for all validation. This macro should not need to be
     29 // subsequently redefined.
     30 #define IPC_ENUM_TRAITS(type) \
     31   IPC_ENUM_TRAITS_VALIDATE(type, true)
     32 
     33 // Convenience macro for defining enumerated type traits for types which are
     34 // range-checked by the IPC system to be in the range of 0..maxvalue inclusive.
     35 // This macro should not need to be subsequently redefined.
     36 #define IPC_ENUM_TRAITS_MAX_VALUE(type, maxvalue) \
     37   IPC_ENUM_TRAITS_MIN_MAX_VALUE(type, 0, maxvalue)
     38 
     39 // Convenience macro for defining enumerated type traits for types which are
     40 // range-checked by the IPC system to be in the range of minvalue..maxvalue
     41 // inclusive. This macro should not need to be subsequently redefined.
     42 #define IPC_ENUM_TRAITS_MIN_MAX_VALUE(type, minvalue, maxvalue)  \
     43   IPC_ENUM_TRAITS_VALIDATE(type, (value >= (minvalue) && value <= (maxvalue)))
     44 
     45 // Traits generation for enums. This macro may be redefined later.
     46 #define IPC_ENUM_TRAITS_VALIDATE(enum_name, validation_expression) \
     47   namespace IPC { \
     48     template <> \
     49     struct IPC_MESSAGE_EXPORT ParamTraits<enum_name> { \
     50       typedef enum_name param_type; \
     51       static void Write(Message* m, const param_type& p); \
     52       static bool Read(const Message* m, PickleIterator* iter, param_type* p); \
     53       static void Log(const param_type& p, std::string* l); \
     54     }; \
     55   }
     56 
     57 #endif  // IPC_PARAM_TRAITS_MACROS_H_
     58 
     59