This source file includes following definitions.
- pmix_bcopy_csum
- pmix_bcopy_uicsum
- pmix_csum
- pmix_csum16
- pmix_uicsum
- pmix_bcopy_uicrc
- pmix_uicrc
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23 #ifndef _PMIX_CRC_H_
24 #define _PMIX_CRC_H_
25
26 #include <src/include/pmix_config.h>
27
28
29 #include <stddef.h>
30
31 BEGIN_C_DECLS
32
33 #define CRC_POLYNOMIAL ((unsigned int)0x04c11db7)
34 #define CRC_INITIAL_REGISTER ((unsigned int)0xffffffff)
35
36
37 #define PMIX_CSUM( SRC, LEN ) pmix_uicsum( SRC, LEN )
38 #define PMIX_CSUM_PARTIAL( SRC, LEN, UI1, UI2 ) \
39 pmix_uicsum_partial( SRC, LEN, UI1, UI2 )
40 #define PMIX_CSUM_BCOPY_PARTIAL( SRC, DST, LEN1, LEN2, UI1, UI2 ) \
41 pmix_bcopy_uicsum_partial( SRC, DST, LEN1, LEN2, UI1, UI2 )
42 #define PMIX_CSUM_ZERO 0
43
44
45 unsigned long
46 pmix_bcopy_csum_partial(
47 const void * source,
48 void * destination,
49 size_t copylen,
50 size_t csumlen,
51 unsigned long* lastPartialLong,
52 size_t* lastPartialLength
53 );
54
55 static inline unsigned long
56 pmix_bcopy_csum (
57 const void * source,
58 void * destination,
59 size_t copylen,
60 size_t csumlen
61 )
62 {
63 unsigned long plong = 0;
64 size_t plength = 0;
65 return pmix_bcopy_csum_partial(source, destination, copylen, csumlen, &plong, &plength);
66 }
67
68 unsigned int
69 pmix_bcopy_uicsum_partial (
70 const void * source,
71 void * destination,
72 size_t copylen,
73 size_t csumlen,
74 unsigned int* lastPartialInt,
75 size_t* lastPartialLength
76 );
77
78 static inline unsigned int
79 pmix_bcopy_uicsum (
80 const void * source,
81 void * destination,
82 size_t copylen,
83 size_t csumlen
84 )
85 {
86 unsigned int pint = 0;
87 size_t plength = 0;
88 return pmix_bcopy_uicsum_partial(source, destination, copylen, csumlen, &pint, &plength);
89 }
90
91 unsigned long
92 pmix_csum_partial (
93 const void * source,
94 size_t csumlen,
95 unsigned long* lastPartialLong,
96 size_t* lastPartialLength
97 );
98
99
100 static inline unsigned long
101 pmix_csum(const void * source, size_t csumlen)
102 {
103 unsigned long lastPartialLong = 0;
104 size_t lastPartialLength = 0;
105 return pmix_csum_partial(source, csumlen, &lastPartialLong, &lastPartialLength);
106 }
107
108
109
110 static inline uint16_t
111 pmix_csum16 (const void * source, size_t csumlen)
112 {
113 uint16_t *src = (uint16_t *) source;
114 register uint32_t csum = 0;
115
116 while (csumlen > 1) {
117 csum += *src++;
118 csumlen -= 2;
119 }
120
121 if(csumlen > 0)
122 csum += *((unsigned char*)src);
123
124 while(csum >> 16) {
125 csum = (csum & 0xFFFF) + (csum >> 16);
126 }
127 return csum;
128 }
129
130 unsigned int
131 pmix_uicsum_partial (
132 const void * source,
133 size_t csumlen,
134 unsigned int * lastPartialInt,
135 size_t* lastPartialLength
136 );
137
138 static inline unsigned int
139 pmix_uicsum(const void * source, size_t csumlen)
140 {
141 unsigned int lastPartialInt = 0;
142 size_t lastPartialLength = 0;
143 return pmix_uicsum_partial(source, csumlen, &lastPartialInt, &lastPartialLength);
144 }
145
146
147
148
149
150 void pmix_initialize_crc_table(void);
151
152 unsigned int
153 pmix_bcopy_uicrc_partial(
154 const void * source,
155 void * destination,
156 size_t copylen,
157 size_t crclen,
158 unsigned int partial_crc);
159
160 static inline unsigned int
161 pmix_bcopy_uicrc(
162 const void * source,
163 void * destination,
164 size_t copylen,
165 size_t crclen)
166 {
167 return pmix_bcopy_uicrc_partial(source, destination, copylen, crclen, CRC_INITIAL_REGISTER);
168 }
169
170 unsigned int
171 pmix_uicrc_partial(
172 const void * source,
173 size_t crclen,
174 unsigned int partial_crc);
175
176
177 static inline unsigned int
178 pmix_uicrc(const void * source, size_t crclen)
179 {
180 return pmix_uicrc_partial(source, crclen, CRC_INITIAL_REGISTER);
181 }
182
183 END_C_DECLS
184
185 #endif