string.h 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. #pragma once
  2. #include <sys/types.h>
  3. #if defined(__cplusplus)
  4. extern "C" {
  5. #endif
  6. void *memset(void *dst, unsigned char C, uint64_t size);
  7. /**
  8. * @brief 获取字符串的大小
  9. *
  10. * @param s 字符串
  11. * @return size_t 大小
  12. */
  13. size_t strlen(const char *s);
  14. /*
  15. 比较字符串 FirstPart and SecondPart
  16. FirstPart = SecondPart => 0
  17. FirstPart > SecondPart => 1
  18. FirstPart < SecondPart => -1
  19. */
  20. int strcmp(const char *FirstPart, const char *SecondPart);
  21. /**
  22. * @brief 拷贝指定字节数的字符串
  23. *
  24. * @param dst 目标地址
  25. * @param src 源字符串
  26. * @param Count 字节数
  27. * @return char*
  28. */
  29. char *strncpy(char *dst, const char *src, size_t Count);
  30. /**
  31. * @brief 拷贝整个字符串
  32. *
  33. * @param dst 目标地址
  34. * @param src 源地址
  35. * @return char* 目标字符串
  36. */
  37. char* strcpy(char* dst, const char* src);
  38. /**
  39. * @brief 拼接两个字符串(将src接到dest末尾)
  40. *
  41. * @param dest 目标串
  42. * @param src 源串
  43. * @return char*
  44. */
  45. char *strcat(char *dest, const char *src);
  46. /**
  47. * @brief 内存拷贝函数
  48. *
  49. * @param dst 目标数组
  50. * @param src 源数组
  51. * @param Num 字节数
  52. * @return void*
  53. */
  54. static void *memcpy(void *dst, const void *src, long Num)
  55. {
  56. int d0 = 0, d1 = 0, d2 = 0;
  57. __asm__ __volatile__("cld \n\t"
  58. "rep \n\t"
  59. "movsq \n\t"
  60. "testb $4,%b4 \n\t"
  61. "je 1f \n\t"
  62. "movsl \n\t"
  63. "1:\ttestb $2,%b4 \n\t"
  64. "je 2f \n\t"
  65. "movsw \n\t"
  66. "2:\ttestb $1,%b4 \n\t"
  67. "je 3f \n\t"
  68. "movsb \n\t"
  69. "3: \n\t"
  70. : "=&c"(d0), "=&D"(d1), "=&S"(d2)
  71. : "0"(Num / 8), "q"(Num), "1"(dst), "2"(src)
  72. : "memory");
  73. return dst;
  74. }
  75. #if defined(__cplusplus)
  76. } /* extern "C" */
  77. #endif