ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/libecb/ecb.pod
(Generate patch)

Comparing libecb/ecb.pod (file contents):
Revision 1.76 by root, Mon Jan 20 13:13:56 2020 UTC vs.
Revision 1.83 by root, Mon Jan 20 21:08:19 2020 UTC

85=over 4 85=over 4
86 86
87=item ECB_C 87=item ECB_C
88 88
89True if the implementation defines the C<__STDC__> macro to a true value, 89True if the implementation defines the C<__STDC__> macro to a true value,
90while not claiming to be C++. 90while not claiming to be C++, i..e C, but not C++.
91 91
92=item ECB_C99 92=item ECB_C99
93 93
94True if the implementation claims to be compliant to C99 (ISO/IEC 94True if the implementation claims to be compliant to C99 (ISO/IEC
959899:1999) or any later version, while not claiming to be C++. 959899:1999) or any later version, while not claiming to be C++.
109 109
110=item ECB_CPP11, ECB_CPP14, ECB_CPP17 110=item ECB_CPP11, ECB_CPP14, ECB_CPP17
111 111
112True if the implementation claims to be compliant to C++11/C++14/C++17 112True if the implementation claims to be compliant to C++11/C++14/C++17
113(ISO/IEC 14882:2011, :2014, :2017) or any later version. 113(ISO/IEC 14882:2011, :2014, :2017) or any later version.
114
115Note that many C++20 features will likely have their own feature test
116macros (see e.g. L<http://eel.is/c++draft/cpp.predefined#1.8>).
117
118=item ECB_OPTIMIZE_SIZE
119
120Is C<1> when the compiler optimizes for size, C<0> otherwise. This symbol
121can also be defined before including F<ecb.h>, in which case it will be
122unchanged.
114 123
115=item ECB_GCC_VERSION (major, minor) 124=item ECB_GCC_VERSION (major, minor)
116 125
117Expands to a true value (suitable for testing in by the preprocessor) 126Expands to a true value (suitable for testing in by the preprocessor)
118if the compiler used is GNU C and the version is the given version, or 127if the compiler used is GNU C and the version is the given version, or
408 417
409=head2 OPTIMISATION HINTS 418=head2 OPTIMISATION HINTS
410 419
411=over 4 420=over 4
412 421
413=item ECB_OPTIMIZE_SIZE
414
415Is C<1> when the compiler optimizes for size, C<0> otherwise. This symbol
416can also be defined before including F<ecb.h>, in which case it will be
417unchanged.
418
419=item bool ecb_is_constant (expr) 422=item bool ecb_is_constant (expr)
420 423
421Returns true iff the expression can be deduced to be a compile-time 424Returns true iff the expression can be deduced to be a compile-time
422constant, and false otherwise. 425constant, and false otherwise.
423 426
595 598
596=item int ecb_ctz32 (uint32_t x) 599=item int ecb_ctz32 (uint32_t x)
597 600
598=item int ecb_ctz64 (uint64_t x) 601=item int ecb_ctz64 (uint64_t x)
599 602
603=item int ecb_ctz (T x) [C++]
604
600Returns the index of the least significant bit set in C<x> (or 605Returns the index of the least significant bit set in C<x> (or
601equivalently the number of bits set to 0 before the least significant bit 606equivalently the number of bits set to 0 before the least significant bit
602set), starting from 0. If C<x> is 0 the result is undefined. 607set), starting from 0. If C<x> is 0 the result is undefined.
603 608
604For smaller types than C<uint32_t> you can safely use C<ecb_ctz32>. 609For smaller types than C<uint32_t> you can safely use C<ecb_ctz32>.
605 610
611The overloaded C++ C<ecb_ctz> function supports C<uint8_t>, C<uint16_t>,
612C<uint32_t> and C<uint64_t> types.
613
606For example: 614For example:
607 615
608 ecb_ctz32 (3) = 0 616 ecb_ctz32 (3) = 0
609 ecb_ctz32 (6) = 1 617 ecb_ctz32 (6) = 1
610 618
611=item bool ecb_is_pot32 (uint32_t x) 619=item bool ecb_is_pot32 (uint32_t x)
612 620
613=item bool ecb_is_pot64 (uint32_t x) 621=item bool ecb_is_pot64 (uint32_t x)
614 622
623=item bool ecb_is_pot (T x) [C++]
624
615Returns true iff C<x> is a power of two or C<x == 0>. 625Returns true iff C<x> is a power of two or C<x == 0>.
616 626
617For smaller types than C<uint32_t> you can safely use C<ecb_is_pot32>. 627For smaller types than C<uint32_t> you can safely use C<ecb_is_pot32>.
618 628
629The overloaded C++ C<ecb_is_pot> function supports C<uint8_t>, C<uint16_t>,
630C<uint32_t> and C<uint64_t> types.
631
619=item int ecb_ld32 (uint32_t x) 632=item int ecb_ld32 (uint32_t x)
620 633
621=item int ecb_ld64 (uint64_t x) 634=item int ecb_ld64 (uint64_t x)
635
636=item int ecb_ld64 (T x) [C++]
622 637
623Returns the index of the most significant bit set in C<x>, or the number 638Returns the index of the most significant bit set in C<x>, or the number
624of digits the number requires in binary (so that C<< 2**ld <= x < 639of digits the number requires in binary (so that C<< 2**ld <= x <
6252**(ld+1) >>). If C<x> is 0 the result is undefined. A common use case is 6402**(ld+1) >>). If C<x> is 0 the result is undefined. A common use case is
626to compute the integer binary logarithm, i.e. C<floor (log2 (n))>, for 641to compute the integer binary logarithm, i.e. C<floor (log2 (n))>, for
631the given data type), while C<ecb_ld> returns how many bits the number 646the given data type), while C<ecb_ld> returns how many bits the number
632itself requires. 647itself requires.
633 648
634For smaller types than C<uint32_t> you can safely use C<ecb_ld32>. 649For smaller types than C<uint32_t> you can safely use C<ecb_ld32>.
635 650
651The overloaded C++ C<ecb_ld> function supports C<uint8_t>, C<uint16_t>,
652C<uint32_t> and C<uint64_t> types.
653
636=item int ecb_popcount32 (uint32_t x) 654=item int ecb_popcount32 (uint32_t x)
637 655
638=item int ecb_popcount64 (uint64_t x) 656=item int ecb_popcount64 (uint64_t x)
639 657
658=item int ecb_popcount (T x) [C++]
659
640Returns the number of bits set to 1 in C<x>. 660Returns the number of bits set to 1 in C<x>.
641 661
642For smaller types than C<uint32_t> you can safely use C<ecb_popcount32>. 662For smaller types than C<uint32_t> you can safely use C<ecb_popcount32>.
663
664The overloaded C++ C<ecb_popcount> function supports C<uint8_t>, C<uint16_t>,
665C<uint32_t> and C<uint64_t> types.
643 666
644For example: 667For example:
645 668
646 ecb_popcount32 (7) = 3 669 ecb_popcount32 (7) = 3
647 ecb_popcount32 (255) = 8 670 ecb_popcount32 (255) = 8
650 673
651=item uint16_t ecb_bitrev16 (uint16_t x) 674=item uint16_t ecb_bitrev16 (uint16_t x)
652 675
653=item uint32_t ecb_bitrev32 (uint32_t x) 676=item uint32_t ecb_bitrev32 (uint32_t x)
654 677
678=item T ecb_bitrev (T x) [C++]
679
655Reverses the bits in x, i.e. the MSB becomes the LSB, MSB-1 becomes LSB+1 680Reverses the bits in x, i.e. the MSB becomes the LSB, MSB-1 becomes LSB+1
656and so on. 681and so on.
657 682
683The overloaded C++ C<ecb_bitrev> function supports C<uint8_t>, C<uint16_t> and C<uint32_t> types.
684
658Example: 685Example:
659 686
660 ecb_bitrev8 (0xa7) = 0xea 687 ecb_bitrev8 (0xa7) = 0xea
661 ecb_bitrev32 (0xffcc4411) = 0x882233ff 688 ecb_bitrev32 (0xffcc4411) = 0x882233ff
662 689
690=item T ecb_bitrev (T x) [C++]
691
692Overloaded C++ bitrev function.
693
694C<T> must be one of C<uint8_t>, C<uint16_t> or C<uint32_t>.
695
663=item uint32_t ecb_bswap16 (uint32_t x) 696=item uint32_t ecb_bswap16 (uint32_t x)
664 697
665=item uint32_t ecb_bswap32 (uint32_t x) 698=item uint32_t ecb_bswap32 (uint32_t x)
666 699
667=item uint64_t ecb_bswap64 (uint64_t x) 700=item uint64_t ecb_bswap64 (uint64_t x)
701
702=item T ecb_bswap (T x)
668 703
669These functions return the value of the 16-bit (32-bit, 64-bit) value 704These functions return the value of the 16-bit (32-bit, 64-bit) value
670C<x> after reversing the order of bytes (0x11223344 becomes 0x44332211 in 705C<x> after reversing the order of bytes (0x11223344 becomes 0x44332211 in
671C<ecb_bswap32>). 706C<ecb_bswap32>).
672 707
673=item T ecb_bswap (T x) [C++] 708The overloaded C++ C<ecb_bswap> function supports C<uint8_t>, C<uint16_t>,
674 709C<uint32_t> and C<uint64_t> types.
675For C++, an additional generic bswap function is provided. It supports
676C<uint8_t>, C<uint16_t>, C<uint32_t> and C<uint64_t>.
677 710
678=item uint8_t ecb_rotl8 (uint8_t x, unsigned int count) 711=item uint8_t ecb_rotl8 (uint8_t x, unsigned int count)
679 712
680=item uint16_t ecb_rotl16 (uint16_t x, unsigned int count) 713=item uint16_t ecb_rotl16 (uint16_t x, unsigned int count)
681 714
697 730
698Current GCC versions understand these functions and usually compile them 731Current GCC versions understand these functions and usually compile them
699to "optimal" code (e.g. a single C<rol> or a combination of C<shld> on 732to "optimal" code (e.g. a single C<rol> or a combination of C<shld> on
700x86). 733x86).
701 734
735=item T ecb_rotl (T x, unsigned int count) [C++]
736
737=item T ecb_rotr (T x, unsigned int count) [C++]
738
739Overloaded C++ rotl/rotr functions.
740
741C<T> must be one of C<uint8_t>, C<uint16_t>, C<uint32_t> or C<uint64_t>.
742
702=back 743=back
703 744
704=head2 HOST ENDIANNESS CONVERSION 745=head2 HOST ENDIANNESS CONVERSION
705 746
706=over 4 747=over 4
718=item uint_fast64_t ecb_le_u64_to_host (uint_fast64_t v) 759=item uint_fast64_t ecb_le_u64_to_host (uint_fast64_t v)
719 760
720Convert an unsigned 16, 32 or 64 bit value from big or little endian to host byte order. 761Convert an unsigned 16, 32 or 64 bit value from big or little endian to host byte order.
721 762
722The naming convention is C<ecb_>(C<be>|C<le>)C<_u>C<16|32|64>C<_to_host>, 763The naming convention is C<ecb_>(C<be>|C<le>)C<_u>C<16|32|64>C<_to_host>,
723where be and le stand for big endian and little endian, respectively. 764where C<be> and C<le> stand for big endian and little endian, respectively.
724 765
725=item uint_fast16_t ecb_host_to_be_u16 (uint_fast16_t v) 766=item uint_fast16_t ecb_host_to_be_u16 (uint_fast16_t v)
726 767
727=item uint_fast32_t ecb_host_to_be_u32 (uint_fast32_t v) 768=item uint_fast32_t ecb_host_to_be_u32 (uint_fast32_t v)
728 769
737Like above, but converts I<from> host byte order to the specified 778Like above, but converts I<from> host byte order to the specified
738endianness. 779endianness.
739 780
740=back 781=back
741 782
742In C++ the following additional functions are supported: 783In C++ the following additional template functions are supported:
743 784
744=over 4 785=over 4
745 786
746=item T ecb_be_to_host (T v) 787=item T ecb_be_to_host (T v)
747 788
749 790
750=item T ecb_host_to_be (T v) 791=item T ecb_host_to_be (T v)
751 792
752=item T ecb_host_to_le (T v) 793=item T ecb_host_to_le (T v)
753 794
754These work like their C counterparts, above, but use templates for the 795These functions work like their C counterparts, above, but use templates,
755type, which make them useful in generic code. 796which make them useful in generic code.
756 797
757C<T> must be one of C<uint8_t>, C<uint16_t>, C<uint32_t> or C<uint64_t> 798C<T> must be one of C<uint8_t>, C<uint16_t>, C<uint32_t> or C<uint64_t>
758(so unlike their C counterparts, there is a version for C<uint8_t>, which 799(so unlike their C counterparts, there is a version for C<uint8_t>, which
759again can be useful in generic code). 800again can be useful in generic code).
760 801
812Like above, but additionally convert from host byte order to big endian 853Like above, but additionally convert from host byte order to big endian
813(C<be>) or little endian (C<le>) byte order while doing so. 854(C<be>) or little endian (C<le>) byte order while doing so.
814 855
815=back 856=back
816 857
817In C++ the following additional functions are supported: 858In C++ the following additional template functions are supported:
818 859
819=over 4 860=over 4
820 861
821=item T ecb_peek (const void *ptr) 862=item T ecb_peek<T> (const void *ptr)
822 863
823=item T ecb_peek_be (const void *ptr) 864=item T ecb_peek_be<T> (const void *ptr)
824 865
825=item T ecb_peek_le (const void *ptr) 866=item T ecb_peek_le<T> (const void *ptr)
826 867
827=item T ecb_peek_u (const void *ptr) 868=item T ecb_peek_u<T> (const void *ptr)
828 869
829=item T ecb_peek_be_u (const void *ptr) 870=item T ecb_peek_be_u<T> (const void *ptr)
830 871
831=item T ecb_peek_le_u (const void *ptr) 872=item T ecb_peek_le_u<T> (const void *ptr)
832 873
833Similarly to their C counterparts, these functions load an unsigned 8, 16, 874Similarly to their C counterparts, these functions load an unsigned 8, 16,
83432 or 64 bit value from memory, with optional conversion from big/little 87532 or 64 bit value from memory, with optional conversion from big/little
835endian. 876endian.
836 877
837Since the type cannot be deduced, it has top be specified explicitly, e.g. 878Since the type cannot be deduced, it has to be specified explicitly, e.g.
838 879
839 uint_fast16_t v = ecb_peek<uint16_t> (ptr); 880 uint_fast16_t v = ecb_peek<uint16_t> (ptr);
840 881
841C<T> must be one of C<uint8_t>, C<uint16_t>, C<uint32_t> or C<uint64_t>. 882C<T> must be one of C<uint8_t>, C<uint16_t>, C<uint32_t> or C<uint64_t>.
842 883

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines