1 /*---------------------------------------------------------------------------*
2 Project: Horizon
3 File: util_Crc.cpp
4
5 Copyright (C)2009 Nintendo Co., Ltd. All rights reserved.
6
7 These coded instructions, statements, and computer programs contain
8 proprietary information of Nintendo of America Inc. and/or Nintendo
9 Company Ltd., and are protected by Federal copyright law. They may
10 not be disclosed to third parties or copied or duplicated in any form,
11 in whole or in part, without the prior written consent of Nintendo.
12
13 $Rev: 26176 $
14 *---------------------------------------------------------------------------*/
15
16 #ifndef NN_UTIL_UTIL_CRC_H_
17 #define NN_UTIL_UTIL_CRC_H_
18
19 #include <nn/types.h>
20
21 #ifdef __cplusplus
22
23 namespace nn { namespace util {
24
25 //----------------------------------------------------------------------------
26 // Constant definition
27 //----------------------------------------------------------------------------
28
29 #define CRC8_STANDARD_POLY 0x07
30 #define CRC8_STANDARD_INIT 0
31
32 #define CRC16_STANDARD_POLY 0xa001 // ビット反転するものは生成多項式も反転
33 #define CRC16_STANDARD_INIT 0
34 #define CRC16_CCITT_POLY 0x1021
35 #define CRC16_CCITT_INIT 0xffff
36
37 #define CRC32_STANDARD_POLY 0xedb88320 // ビット反転するものは生成多項式も反転
38 #define CRC32_STANDARD_INIT 0xffffffff
39 #define CRC32_POSIX_POLY 0x04c11db7
40 #define CRC32_POSIX_INIT 0
41
42 //----------------------------------------------------------------------------
43 // Type definition
44 //----------------------------------------------------------------------------
45
46
47 //! @name CRC
48 //@{
49
50 /*!
51 //brief CRC-8 を計算するために使用するコンテキスト構造体です。
52
53 @see Crc8Init, Crc8Update, Crc8GetHash
54 */
55 typedef u8 Crc8Context;
56
57 /*!
58 //brief CRC-16、CRC-16/CCITT を計算するために使用するコンテキスト構造体です。
59
60 @see Crc16Init, Crc16Update, Crc16GetHash
61 @see Crc16CcittInit, Crc16CcittUpdate, Crc16CcittGetHash
62 */
63 typedef u16 Crc16Context;
64
65 /*!
66 //brief CRC-32、CRC-32/POSIX を計算するために使用するコンテキスト構造体です。
67
68 @see Crc32Init, Crc32Update, Crc32GetHash
69 @see Crc32PosixInit, Crc32PosixUpdate, Crc32PosixGetHash
70 */
71 typedef u32 Crc32Context;
72
73 /*!
74 //brief CRC-8 を計算するために使用するテーブルのための構造体です。
75
76 @see Crc8InitTable, Crc8Init, Crc8Update, Crc8GetHash
77 */
78 typedef struct Crc8Table
79 {
80 //! テーブルデータ
81 u8 table[256];
82 }
83 Crc8Table;
84
85 /*!
86 //brief CRC-16、CRC-16/CCITT を計算するために使用するテーブルのための構造体です。
87
88 @see Crc16InitTable, Crc16Init, Crc16Update, Crc16GetHash
89 @see Crc16CcittInitTable, Crc16CcittInit, Crc16CcittUpdate, Crc16CcittGetHash
90 */
91 typedef struct Crc16Table
92 {
93 //! テーブルデータ
94 u16 table[256];
95 }
96 Crc16Table;
97
98 /*!
99 //brief CRC-32、CRC-32/POSIX を計算するために使用するテーブルのための構造体です。
100
101 @see Crc32InitTable, Crc32Init, Crc32Update, Crc32GetHash
102 @see Crc32PosixInitTable, Crc32PosixInit, Crc32PosixUpdate, Crc32PosixGetHash
103 */
104 typedef struct Crc32Table
105 {
106 //! テーブルデータ
107 u32 table[256];
108 }
109 Crc32Table;
110
111 //@}
112
113 //----------------------------------------------------------------------------
114 // Declaration of function
115 //----------------------------------------------------------------------------
116
117 //----------------------------------------------------------------------------
118 // Implementation of inline function
119 //----------------------------------------------------------------------------
120
121 /*****************************************************************************/
122 /* CRC-8 共通 */
123 /*****************************************************************************/
124
125 /*---------------------------------------------------------------------------*
126 Name: iCrc8InitTable
127
128 Description: CRC-8 値を求めるために使う Crc8Table 構造体を初期化する。
129
130 Arguments: table Crc8Table 構造体
131 poly 生成多項式のビット表現から最上位ビットを除いた数
132
133 Returns: None.
134 *---------------------------------------------------------------------------*/
135 void iCrc8InitTable(Crc8Table* table, u8 poly);
136
137 /*---------------------------------------------------------------------------*
138 Name: iCrc8InitTableRev
139
140 Description: CRC-8 値を求めるために使う Crc8Table 構造体を初期化する。
141 下位ビットを上位の桁として扱う。
142
143 Arguments: table Crc8Table 構造体
144 poly 生成多項式のビット表現から最上位ビットを除いた数を
145 上下反転させたもの
146
147 Returns: None.
148 *---------------------------------------------------------------------------*/
149 void iCrc8InitTableRev(Crc8Table* table, u8 poly);
150
151 /*---------------------------------------------------------------------------*
152 Name: iCrc8Init
153
154 Description: CRC-8 値を求めるために使う Crc8Context 構造体を初期化する。
155
156 Arguments: context Crc8Context 構造体
157 init Crc の初期値
158
159 Returns: None.
160 *---------------------------------------------------------------------------*/
iCrc8Init(Crc8Context * context,u8 init)161 inline void iCrc8Init(Crc8Context* context, u8 init)
162 {
163 *context = init;
164 }
165
166 /*---------------------------------------------------------------------------*
167 Name: iCrc8Update
168
169 Description: CRC-8 値を与えたデータで更新する。
170
171 Arguments: table 計算用のテーブル Crc8Table へのポインタ
172 context Crc8Context 構造体
173 input 入力データへのポインタ
174 length 入力データ長
175
176 Returns: None.
177 *---------------------------------------------------------------------------*/
178 void iCrc8Update(const Crc8Table* table, Crc8Context* context, const void* input, u32 length);
179
180 /*---------------------------------------------------------------------------*
181 Name: iCrc8UpdateRev
182
183 Description: CRC-8 値を与えたデータで更新する。
184 下位ビットを上位の桁として扱う。
185
186 Arguments: table 計算用のテーブル Crc8Table へのポインタ
187 context Crc8Context 構造体
188 input 入力データへのポインタ
189 length 入力データ長
190
191 Returns: None.
192 *---------------------------------------------------------------------------*/
iCrc8UpdateRev(const Crc8Table * table,Crc8Context * context,const void * input,u32 length)193 inline void iCrc8UpdateRev(const Crc8Table* table, Crc8Context* context, const void* input, u32 length)
194 {
195 iCrc8Update(table, context, input, length);
196 }
197
198 /*---------------------------------------------------------------------------*
199 Name: iCrc8GetHash
200
201 Description: 最終的な CRC-8 値を得る。
202
203 Arguments: context Crc8Context 構造体
204
205 Returns: 計算結果.
206 *---------------------------------------------------------------------------*/
iCrc8GetHash(Crc8Context * context)207 inline u8 iCrc8GetHash(Crc8Context* context)
208 {
209 return (u8)*context;
210 }
211
212 /*****************************************************************************/
213 /* CRC-8 */
214 /*****************************************************************************/
215
216 //! @name CRC
217 //@{
218
219 /*!
220 //brief
221
222 CRC-8 値を求めるために使う Crc8Table 構造体を初期化します。
223
224 @param[out] table 初期化する CRC-8 計算用のテーブルのポインタ
225
226 */
227 void Crc8InitTable(Crc8Table* table);
228
Crc8InitTable(Crc8Table * table)229 inline void Crc8InitTable(Crc8Table* table)
230 {
231 iCrc8InitTable(table, CRC8_STANDARD_POLY);
232 }
233
234 /*!
235 //brief
236
237 CRC-8 値を求めるために使う @ref Crc8Context 構造体を初期化します。
238
239 @param[out] context 初期化する CRC-8 計算用のコンテキスト構造体へのポインタ
240
241 */
242 void Crc8Init(Crc8Context* context);
243
Crc8Init(Crc8Context * context)244 inline void Crc8Init(Crc8Context* context)
245 {
246 iCrc8Init(context, CRC8_STANDARD_INIT);
247 }
248
249 /*!
250 //brief
251
252 CRC-8 値を与えたデータで更新します。
253
254 @param[in] table CRC-8 計算用のテーブルへのポインタ
255 @param[in] context CRC-8 計算用のコンテキスト構造体へのポインタ
256 @param[in] input 入力データへのポインタ
257 @param[in] length 入力データのサイズ
258
259 */
260 void Crc8Update(const Crc8Table* table, Crc8Context* context, const void* input, u32 length);
261
Crc8Update(const Crc8Table * table,Crc8Context * context,const void * input,u32 length)262 inline void Crc8Update(const Crc8Table* table, Crc8Context* context, const void* input, u32 length)
263 {
264 iCrc8Update(table, context, input, length);
265 }
266
267 /*!
268 //brief
269
270 CRC-8 によるハッシュ値を得ます。
271
272 @param[in] context CRC-8 生成用のコンテキスト構造体へのポインタ
273
274 @return CRC-8の計算結果
275 */
276 u8 Crc8GetHash(Crc8Context* context);
277
Crc8GetHash(Crc8Context * context)278 inline u8 Crc8GetHash(Crc8Context* context)
279 {
280 return iCrc8GetHash(context);
281 }
282
283 /*****************************************************************************/
284 /* CRC-16 共通 */
285 /*****************************************************************************/
286
287 /*---------------------------------------------------------------------------*
288 Name: iCrc16InitTable
289
290 Description: CRC-16 値を求めるために使う Crc16Table 構造体を初期化する。
291
292 Arguments: table Crc16Table 構造体
293 poly 生成多項式のビット表現から最上位ビットを除いた数
294
295 Returns: None.
296 *---------------------------------------------------------------------------*/
297 void iCrc16InitTable(Crc16Table* table, u16 poly);
298
299 /*---------------------------------------------------------------------------*
300 Name: iCrc16InitTableRev
301
302 Description: CRC-16 値を求めるために使う Crc16Table 構造体を初期化する。
303 下位ビットを上位の桁として扱う。
304
305 Arguments: table Crc16Table 構造体
306 poly 生成多項式のビット表現から最上位ビットを除いた数を
307 上下反転させたもの
308
309 Returns: None.
310 *---------------------------------------------------------------------------*/
311 void iCrc16InitTableRev(Crc16Table* table, u16 poly);
312
313 /*---------------------------------------------------------------------------*
314 Name: iCrc16Init
315
316 Description: CRC-16 値を求めるために使う Crc16Context 構造体を初期化する。
317
318 Arguments: context Crc16Context 構造体
319 init Crc の初期値
320
321 Returns: None.
322 *---------------------------------------------------------------------------*/
iCrc16Init(Crc16Context * context,u16 init)323 inline void iCrc16Init(Crc16Context* context, u16 init)
324 {
325 *context = init;
326 }
327
328 /*---------------------------------------------------------------------------*
329 Name: iCrc16Update
330
331 Description: CRC-16 値を与えたデータで更新する。
332
333 Arguments: table 計算用のテーブル Crc16Table へのポインタ
334 context Crc16Context 構造体
335 input 入力データへのポインタ
336 length 入力データ長
337
338 Returns: None.
339 *---------------------------------------------------------------------------*/
340 void iCrc16Update(const Crc16Table* table, Crc16Context* context, const void* input, u32 length);
341
342 /*---------------------------------------------------------------------------*
343 Name: iCrc16UpdateRev
344
345 Description: CRC-16 値を与えたデータで更新する。
346 下位ビットを上位の桁として扱う。
347
348 Arguments: table 計算用のテーブル Crc16Table へのポインタ
349 context Crc16Context 構造体
350 input 入力データへのポインタ
351 length 入力データ長
352
353 Returns: None.
354 *---------------------------------------------------------------------------*/
355 void iCrc16UpdateRev(const Crc16Table* table, Crc16Context* context, const void* input, u32 length);
356
357 /*---------------------------------------------------------------------------*
358 Name: iCrc16GetHash
359
360 Description: 最終的な CRC-16 値を得る。
361
362 Arguments: context Crc16Context 構造体
363
364 Returns: 計算結果.
365 *---------------------------------------------------------------------------*/
iCrc16GetHash(Crc16Context * context)366 inline u16 iCrc16GetHash(Crc16Context* context)
367 {
368 return (u16)*context;
369 }
370
371 /*****************************************************************************/
372 /* Crc-16/CCITT(X.25) */
373 /*****************************************************************************/
374
375 /*!
376 //brief
377
378 CRC-16/CCITT 値を求めるために使う Crc16Table 構造体を初期化します。
379
380 @param[out] table 初期化する CRC-16/CCITT 計算用のテーブルのポインタ
381
382 */
383 void Crc16CcittInitTable(Crc16Table* table);
384
Crc16CcittInitTable(Crc16Table * table)385 inline void Crc16CcittInitTable(Crc16Table* table)
386 {
387 iCrc16InitTable(table, CRC16_CCITT_POLY);
388 }
389
390 /*!
391 //brief
392
393 CRC-16/CCITT 値を求めるために使う @ref Crc16Context 構造体を初期化します。
394
395 @param[out] context 初期化する CRC-16/CCITT 計算用のコンテキスト構造体へのポインタ
396
397 */
398 void Crc16CcittInit(Crc16Context* context);
399
Crc16CcittInit(Crc16Context * context)400 inline void Crc16CcittInit(Crc16Context* context)
401 {
402 iCrc16Init(context, CRC16_CCITT_INIT);
403 }
404
405 /*!
406 //brief
407
408 CRC-16/CCITT 値を与えたデータで更新します。
409
410 @param[in] table CRC-16/CCITT 計算用のテーブルへのポインタ
411 @param[in] context CRC-16/CCITT 計算用のコンテキスト構造体へのポインタ
412 @param[in] input 入力データへのポインタ
413 @param[in] length 入力データのサイズ
414
415 */
416 void Crc16CcittUpdate(const Crc16Table* table, Crc16Context* context, const void* input, u32 length);
417
Crc16CcittUpdate(const Crc16Table * table,Crc16Context * context,const void * input,u32 length)418 inline void Crc16CcittUpdate(const Crc16Table* table, Crc16Context* context, const void* input, u32 length)
419 {
420 iCrc16Update(table, context, input, length);
421 }
422
423 /*!
424 //brief
425
426 CRC-16/CCITT によるハッシュ値を得ます。
427
428 @param[in] context CRC-16/CCITT 生成用のコンテキスト構造体へのポインタ
429
430 @return CRC-16/CCITTの計算結果
431 */
432 u16 Crc16CcittGetHash(Crc16Context* context);
433
Crc16CcittGetHash(Crc16Context * context)434 inline u16 Crc16CcittGetHash(Crc16Context* context)
435 {
436 return iCrc16GetHash(context);
437 }
438
439 /*****************************************************************************/
440 /* CRC-16 */
441 /*****************************************************************************/
442
443 /*!
444 //brief
445
446 CRC-16 値を求めるために使う Crc16Table 構造体を初期化します。
447
448 @param[out] table 初期化する CRC-16 計算用のテーブルのポインタ
449
450 */
451 void Crc16InitTable(Crc16Table* table);
452
Crc16InitTable(Crc16Table * table)453 inline void Crc16InitTable(Crc16Table* table)
454 {
455 iCrc16InitTableRev(table, CRC16_STANDARD_POLY);
456 }
457
458 /*!
459 //brief
460
461 CRC-16 値を求めるために使う @ref Crc16Context 構造体を初期化します。
462
463 @param[out] context 初期化する CRC-16 計算用のコンテキスト構造体へのポインタ。
464
465 */
466 void Crc16Init(Crc16Context* context);
467
Crc16Init(Crc16Context * context)468 inline void Crc16Init(Crc16Context* context)
469 {
470 iCrc16Init(context, CRC16_STANDARD_INIT);
471 }
472
473 /*!
474 //brief
475
476 CRC-16 値を与えたデータで更新します。
477
478 @param[in] table CRC-16 計算用のテーブルへのポインタ
479 @param[in] context CRC-16 計算用のコンテキスト構造体へのポインタ
480 @param[in] input 入力データへのポインタ
481 @param[in] length 入力データのサイズ
482
483 */
484 void Crc16Update(const Crc16Table* table, Crc16Context* context, const void* input, u32 length);
485
Crc16Update(const Crc16Table * table,Crc16Context * context,const void * input,u32 length)486 inline void Crc16Update(const Crc16Table* table, Crc16Context* context, const void* input, u32 length)
487 {
488 iCrc16UpdateRev(table, context, input, length);
489 }
490
491 /*!
492 //brief
493
494 CRC-16 によるハッシュ値を得ます。
495
496 @param[in] context CRC-16 生成用のコンテキスト構造体へのポインタ
497
498 @return CRC-16の計算結果
499 */
500 u16 Crc16GetHash(Crc16Context* context);
501
Crc16GetHash(Crc16Context * context)502 inline u16 Crc16GetHash(Crc16Context* context)
503 {
504 return iCrc16GetHash(context);
505 }
506
507 /*****************************************************************************/
508 /* CRC-32 共通 */
509 /*****************************************************************************/
510
511 /*---------------------------------------------------------------------------*
512 Name: iCrc32InitTable
513
514 Description: CRC-32 値を求めるために使う Crc32Table 構造体を初期化する。
515
516 Arguments: table Crc32Table 構造体
517 poly 生成多項式のビット表現から最上位ビットを除いた数
518
519 Returns: None.
520 *---------------------------------------------------------------------------*/
521 void iCrc32InitTable(Crc32Table* table, u32 poly);
522
523 /*---------------------------------------------------------------------------*
524 Name: iCrc16InitTableRev
525
526 Description: CRC-32 値を求めるために使う Crc16Table 構造体を初期化する。
527 下位ビットを上位の桁として扱う。
528
529 Arguments: table Crc16Table 構造体
530 poly 生成多項式のビット表現から最上位ビットを除いた数を
531 上下反転させたもの
532
533 Returns: None.
534 *---------------------------------------------------------------------------*/
535 void iCrc32InitTableRev(Crc32Table* table, u32 poly);
536
537 /*---------------------------------------------------------------------------*
538 Name: iCrc32Init
539
540 Description: CRC-32 値を求めるために使う Crc32Context 構造体を初期化する。
541
542 Arguments: context Crc32Context 構造体
543 init Crc の初期値
544
545 Returns: None.
546 *---------------------------------------------------------------------------*/
iCrc32Init(Crc32Context * context,u32 init)547 inline void iCrc32Init(Crc32Context* context, u32 init)
548 {
549 *context = init;
550 }
551
552 /*---------------------------------------------------------------------------*
553 Name: iCrc32Update
554
555 Description: CRC-32 値を与えたデータで更新する。
556
557 Arguments: table 計算用のテーブル Crc32Table へのポインタ
558 context Crc32Context 構造体
559 input 入力データへのポインタ
560 length 入力データ長
561
562 Returns: None.
563 *---------------------------------------------------------------------------*/
564 void iCrc32Update(const Crc32Table* table, Crc32Context* context, const void* input, u32 length);
565
566 /*---------------------------------------------------------------------------*
567 Name: iCrc32UpdateRev
568
569 Description: CRC-32 値を与えたデータで更新する。
570 下位ビットを上位の桁として扱う。
571
572 Arguments: table 計算用のテーブル Crc32Table へのポインタ
573 context Crc32Context 構造体
574 input 入力データへのポインタ
575 length 入力データ長
576
577 Returns: None.
578 *---------------------------------------------------------------------------*/
579 void iCrc32UpdateRev(const Crc32Table* table, Crc32Context* context, const void* input, u32 length);
580
581 /*---------------------------------------------------------------------------*
582 Name: iCrc32GetHash
583
584 Description: 最終的な CRC-32 値を得る。
585
586 Arguments: context Crc32Context 構造体
587
588 Returns: 計算結果.
589 *---------------------------------------------------------------------------*/
iCrc32GetHash(Crc32Context * context)590 inline u32 iCrc32GetHash(Crc32Context* context)
591 {
592 return (u32)*context;
593 }
594
595 /*****************************************************************************/
596 /* CRC-32 */
597 /*****************************************************************************/
598
599 /*!
600 //brief
601
602 CRC-32 値を求めるために使う Crc32Table 構造体を初期化します。
603
604 @param[out] table 初期化する CRC-32 計算用のテーブルのポインタ
605
606 */
607 void Crc32InitTable(Crc32Table* table);
608
Crc32InitTable(Crc32Table * table)609 inline void Crc32InitTable(Crc32Table* table)
610 {
611 iCrc32InitTableRev(table, CRC32_STANDARD_POLY);
612 }
613
614 /*!
615 //brief
616
617 CRC-32 値を求めるために使う @ref Crc32Context 構造体を初期化します。
618
619 @param[out] context 初期化する CRC-32 計算用のコンテキスト構造体へのポインタ。
620
621 */
622 void Crc32Init(Crc32Context* context);
623
Crc32Init(Crc32Context * context)624 inline void Crc32Init(Crc32Context* context)
625 {
626 iCrc32Init(context, CRC32_STANDARD_INIT);
627 }
628
629 /*!
630 //brief
631
632 CRC-32 値を与えたデータで更新します。
633
634 @param[in] table CRC-32 計算用のテーブルへのポインタ
635 @param[in] context CRC-32 計算用のコンテキスト構造体へのポインタ
636 @param[in] input 入力データへのポインタ
637 @param[in] length 入力データのサイズ
638
639 */
640 void Crc32Update(const Crc32Table* table, Crc32Context* context, const void* input, u32 length);
641
Crc32Update(const Crc32Table * table,Crc32Context * context,const void * input,u32 length)642 inline void Crc32Update(const Crc32Table* table, Crc32Context* context, const void* input, u32 length)
643 {
644 iCrc32UpdateRev(table, context, input, length);
645 }
646
647 /*!
648 //brief
649
650 CRC-32 によるハッシュ値を得ます。
651
652 @param[in] context CRC-32 生成用のコンテキスト構造体へのポインタ
653
654 @return CRC-32の計算結果
655 */
656 u32 Crc32GetHash(Crc32Context* context);
657
Crc32GetHash(Crc32Context * context)658 inline u32 Crc32GetHash(Crc32Context* context)
659 {
660 return (u32)(~iCrc32GetHash(context));
661 }
662
663 /*****************************************************************************/
664 /* CRC-32/POSIX 1003.2 */
665 /*****************************************************************************/
666
667 /*!
668 //brief
669
670 CRC-32/POSIX 値を求めるために使う Crc32Table 構造体を初期化します。
671
672 @param[out] table 初期化する CRC-32/POSIX 計算用のテーブルのポインタ
673
674 */
675 void Crc32PosixInitTable(Crc32Table* table);
676
Crc32PosixInitTable(Crc32Table * table)677 inline void Crc32PosixInitTable(Crc32Table* table)
678 {
679 iCrc32InitTable(table, CRC32_POSIX_POLY);
680 }
681
682 /*!
683 //brief
684
685 CRC-32/POSIX 値を求めるために使う @ref Crc32Context 構造体を初期化します。
686
687 @param[out] context 初期化する CRC-32/POSIX 計算用のコンテキスト構造体へのポインタ。
688
689 */
690 void Crc32PosixInit(Crc32Context* context);
691
Crc32PosixInit(Crc32Context * context)692 inline void Crc32PosixInit(Crc32Context* context)
693 {
694 iCrc32Init(context, CRC32_POSIX_INIT);
695 }
696
697 /*!
698 //brief
699
700 CRC-32/POSIX 値を与えたデータで更新します。
701
702 @param[in] table CRC-32/POSIX 計算用のテーブルへのポインタ
703 @param[in] context CRC-32/POSIX 計算用のコンテキスト構造体へのポインタ
704 @param[in] input 入力データへのポインタ
705 @param[in] length 入力データのサイズ
706
707 */
708 void Crc32PosixUpdate(const Crc32Table* table, Crc32Context* context, const void* input, u32 length);
709
Crc32PosixUpdate(const Crc32Table * table,Crc32Context * context,const void * input,u32 length)710 inline void Crc32PosixUpdate(const Crc32Table* table, Crc32Context* context, const void* input, u32 length)
711 {
712 iCrc32Update(table, context, input, length);
713 }
714
715 /*!
716 //brief
717
718 CRC-32/POSIX によるハッシュ値を得ます。
719
720 @param[in] context CRC-32/POSIX 生成用のコンテキスト構造体へのポインタ
721
722 @return CRC-32/POSIXの計算結果
723 */
724 u32 Crc32PosixGetHash(Crc32Context* context);
725
Crc32PosixGetHash(Crc32Context * context)726 inline u32 Crc32PosixGetHash(Crc32Context* context)
727 {
728 return (u32)(~iCrc32GetHash(context));
729 }
730
731
732 /*****************************************************************************/
733 /* ユーティリティ関数 */
734 /*****************************************************************************/
735
736 /*!
737 //brief
738
739 CRC-8 値を計算します。
740
741 @param[in] table CRC-8 計算用のテーブルへのポインタ
742 @param[in] data 入力データのポインタ
743 @param[in] dataLength 入力データのサイズ
744
745 @return CRC-8の計算結果
746 */
747 u8 CalcCrc8(const Crc8Table* table, const void* data, u32 dataLength);
748
749 /*!
750 //brief
751
752 CRC-16 値を計算します。
753
754 @param[in] table CRC-16 計算用のテーブルへのポインタ
755 @param[in] data 入力データのポインタ
756 @param[in] dataLength 入力データのサイズ
757
758 @return CRC-16の計算結果
759 */
760 u16 CalcCrc16(const Crc16Table* table, const void* data, u32 dataLength);
761
762 /*!
763 //brief
764
765 CRC-16/CCITT 値を計算します。
766
767 @param[in] table CRC-16/CCITT 計算用のテーブルへのポインタ
768 @param[in] data 入力データのポインタ
769 @param[in] data 入力データのポインタ
770 @param[in] dataLength 入力データのサイズ
771
772 @return CRC-16/CCITTの計算結果
773 */
774 u16 CalcCrc16Ccitt(const Crc16Table* table, const void* data, u32 dataLength);
775
776 /*!
777 //brief
778
779 CRC-32 値を計算します。
780
781 @param[in] table CRC-32 計算用のテーブルへのポインタ
782 @param[in] data 入力データのポインタ
783 @param[in] dataLength 入力データのサイズ
784
785 @return CRC-32の計算結果
786 */
787 u32 CalcCrc32(const Crc32Table* table, const void* data, u32 dataLength);
788
789 /*!
790 //brief
791
792 CRC-32/POSIX 値を計算します。
793
794 @param[in] table CRC-32/POSIX 計算用のテーブルへのポインタ
795 @param[in] data 入力データのポインタ
796 @param[in] dataLength 入力データのサイズ
797
798 @return CRC-32/POSIXの計算結果
799 */
800 u32 CalcCrc32Posix(const Crc32Table* table, const void* data, u32 dataLength);
801
802 //@}
803
804 }}
805
806 #endif // __cplusplus
807
808 #endif // ifndef NN_UTIL_UTIL_CRC_H_
809