123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081 |
- #ifndef _PCITOOL_TOOLS_H
- #define _PCITOOL_TOOLS_H
- #include <stdio.h>
- #include <stdint.h>
- #include <pcilib.h>
- #define BIT_MASK(bits) ((1ll << (bits)) - 1)
- #define min2(a, b) (((a)<(b))?(a):(b))
- #ifdef __cplusplus
- extern "C" {
- #endif
- /**
- * Check if provided string is a decimal integer
- * @param[in] str - string to check
- * @return - 1 if string is a number and 0 - otherwise
- */
- int pcilib_isnumber(const char *str);
- /**
- * Check if provided string is a hexdecimal integer, optionally prefexed with 0x
- * @param[in] str - string to check
- * @return - 1 if string is a number and 0 - otherwise
- */
- int pcilib_isxnumber(const char *str);
- /**
- * Check if first \p len bytes of the provided string is a decimal integer
- * @param[in] str - string to check
- * @param[in] len - size of the string
- * @return - 1 if string is a number and 0 - otherwise
- */
- int pcilib_isnumber_n(const char *str, size_t len);
- /**
- * Check if first \p len bytes of the provided string is a hexdecimal integer, optionally prefexed with 0x
- * @param[in] str - string to check
- * @param[in] len - size of the string
- * @return - 1 if string is a number and 0 - otherwise
- */
- int pcilib_isxnumber_n(const char *str, size_t len);
- /**
- * Change the endianess of the provided number (between big- and little-endian format)
- * @param[in] x - number in little/big endian format
- * @return - number in big/little endian format
- */
- uint16_t pcilib_swap16(uint16_t x);
- /**
- * Change the endianess of the provided number (between big- and little-endian format)
- * @param[in] x - number in little/big endian format
- * @return - number in big/little endian format
- */
- uint32_t pcilib_swap32(uint32_t x);
- /**
- * Change the endianess of the provided number (between big- and little-endian format)
- * @param[in] x - number in little/big endian format
- * @return - number in big/little endian format
- */
- uint64_t pcilib_swap64(uint64_t x);
- /**
- * Change the endianess of the provided array
- * @param[out] dst - the destination memory region, can be equal to \p src
- * @param[in] src - the source memory region
- * @param[in] access - the size of word in bytes (1, 2, 4, or 8)
- * @param[in] n - the number of words to copy (\p n * \p access bytes are copied).
- */
- void pcilib_swap(void *dst, void *src, size_t access, size_t n);
- #ifdef __cplusplus
- }
- #endif
- #endif /* _PCITOOL_TOOS_H */
|