[IOT-2494] SVR DB Editor : Improve code
[iotivity.git] / resource / c_common / byte_array.h
1 /******************************************************************
2  *
3  * Copyright 2015 Samsung Electronics All Rights Reserved.
4  *
5  *
6  *
7  * Licensed under the Apache License, Version 2.0 (the "License");
8  * you may not use this file except in compliance with the License.
9  * You may obtain a copy of the License at
10  *
11  *      LICENSE-2.0" target="_blank">http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing, software
14  * distributed under the License is distributed on an "AS IS" BASIS,
15  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16  * See the License for the specific language governing permissions and
17  * limitations under the License.
18  *
19
20  ******************************************************************/
21
22
23 #ifndef _BYTE_ARRAY_H_
24 #define _BYTE_ARRAY_H_
25
26 #ifdef __cplusplus
27 extern "C" {
28 #endif //__cplusplus
29
30 #include <string.h>
31 #include <stdlib.h>
32 #include <stdint.h>
33
34 /**
35  * @struct ByteArray_t
36  *
37  * General purpose byte array structure.
38  *
39  * Contains pointer to array of bytes and it's length.
40  */
41
42 typedef struct ByteArray
43 {
44     uint8_t *data;    /**< Pointer to the byte array */
45     size_t len;      /**< Data size */
46 } ByteArray_t;
47
48
49 /**@def BYTE_ARRAY_INITIALIZER
50  *
51  * Initializes of existing byte array pointer to \a NULL.
52  */
53 #undef BYTE_ARRAY_INITIALIZER
54 #define BYTE_ARRAY_INITIALIZER {NULL, 0}
55
56 /**@def INIT_BYTE_ARRAY(array)
57  *
58  * Initializes of existing byte array \a array.
59  *
60  * @param array ByteArray_t
61  */
62 #undef INIT_BYTE_ARRAY
63 #define INIT_BYTE_ARRAY(array) do{  \
64         (array).data = NULL;        \
65         (array).len = 0;            \
66     }while(0)
67
68 /**@def DEINIT_BYTE_ARRAY(array)
69  *
70  * Deinitializes of existing byte array \a array.
71  *
72  * @param array ByteArray_t
73  */
74 #undef DEINIT_BYTE_ARRAY
75 #define DEINIT_BYTE_ARRAY(array) do{  \
76         OICFree((array).data);       \
77         (array).data = NULL;        \
78         (array).len = 0;            \
79     }while(0)
80
81 /**@def PRINT_BYTE_ARRAY(msg, array)
82  *
83  * Prints out byte array \a array in hex representation with message \a msg.
84  *
85  * @param msg string of characters
86  * @param array byte array
87  */
88 #undef PRINT_BYTE_ARRAY
89 #define PRINT_BYTE_ARRAY(msg, array) do{                \
90         size_t i;                                       \
91         printf("%10s", msg);                            \
92         for( i=0; i< (array).len; i++) {                \
93             if( (i!=0) && ((i%16)==0) ) putchar('\n');  \
94             printf("%02X ", (array).data[i]);        \
95         }                                               \
96         putchar('\n');                                  \
97     }while(0)
98
99 /**@def INC_BYTE_ARRAY_PTR(array, size)
100  *
101  * Increments byte array pointer \a array by \a size.
102  *
103  * @param array byte array pointer
104  * @param size number of positions
105  */
106 #undef INC_BYTE_ARRAY_PTR
107 #define INC_BYTE_ARRAY_PTR(array, size) do{      \
108         (array)->data += size;                   \
109         (array)->len -= size;                    \
110     }while(0)
111
112 /**@def INC_BYTE_ARRAY(array, size)
113  *
114  * Increments byte array \a array by \a size.
115  *
116  * @param array byte array
117  * @param size number of positions
118  */
119 #undef INC_BYTE_ARRAY
120 #define INC_BYTE_ARRAY(array, size) do{      \
121         (array).data += size;                \
122         (array).len -= size;                 \
123     }while(0)
124
125 #ifdef __cplusplus
126 }
127 #endif //__cplusplus
128
129 #endif // _BYTE_ARRAY_H_