fltrimpl.h 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. #ifndef CRYPTOPP_FLTRIMPL_H
  2. #define CRYPTOPP_FLTRIMPL_H
  3. #if CRYPTOPP_MSC_VERSION
  4. # pragma warning(push)
  5. # pragma warning(disable: 4100)
  6. #endif
  7. #if CRYPTOPP_GCC_DIAGNOSTIC_AVAILABLE
  8. # pragma GCC diagnostic push
  9. # pragma GCC diagnostic ignored "-Wunused-value"
  10. #endif
  11. #define FILTER_BEGIN \
  12. switch (m_continueAt) \
  13. { \
  14. case 0: \
  15. m_inputPosition = 0;
  16. #define FILTER_END_NO_MESSAGE_END_NO_RETURN \
  17. break; \
  18. default: \
  19. CRYPTOPP_ASSERT(false); \
  20. }
  21. #define FILTER_END_NO_MESSAGE_END \
  22. FILTER_END_NO_MESSAGE_END_NO_RETURN \
  23. return 0;
  24. /*
  25. #define FILTER_END \
  26. case -1: \
  27. if (messageEnd && Output(-1, NULLPTR, 0, messageEnd, blocking)) \
  28. return 1; \
  29. FILTER_END_NO_MESSAGE_END
  30. */
  31. #define FILTER_OUTPUT3(site, statement, output, length, messageEnd, channel) \
  32. {\
  33. case site: \
  34. statement; \
  35. if (Output(site, output, length, messageEnd, blocking, channel)) \
  36. return STDMAX(size_t(1), length-m_inputPosition);\
  37. }
  38. #define FILTER_OUTPUT2(site, statement, output, length, messageEnd) \
  39. FILTER_OUTPUT3(site, statement, output, length, messageEnd, DEFAULT_CHANNEL)
  40. #define FILTER_OUTPUT(site, output, length, messageEnd) \
  41. FILTER_OUTPUT2(site, 0, output, length, messageEnd)
  42. #define FILTER_OUTPUT_BYTE(site, output) \
  43. FILTER_OUTPUT(site, &(const byte &)(byte)output, 1, 0)
  44. #define FILTER_OUTPUT2_MODIFIABLE(site, statement, output, length, messageEnd) \
  45. {\
  46. /* fall through */ \
  47. case site: \
  48. statement; \
  49. if (OutputModifiable(site, output, length, messageEnd, blocking)) \
  50. return STDMAX(size_t(1), length-m_inputPosition);\
  51. }
  52. #define FILTER_OUTPUT_MODIFIABLE(site, output, length, messageEnd) \
  53. FILTER_OUTPUT2_MODIFIABLE(site, 0, output, length, messageEnd)
  54. #define FILTER_OUTPUT2_MAYBE_MODIFIABLE(site, statement, output, length, messageEnd, modifiable) \
  55. {\
  56. /* fall through */ \
  57. case site: \
  58. statement; \
  59. if (modifiable ? OutputModifiable(site, output, length, messageEnd, blocking) : Output(site, output, length, messageEnd, blocking)) \
  60. return STDMAX(size_t(1), length-m_inputPosition);\
  61. }
  62. #define FILTER_OUTPUT_MAYBE_MODIFIABLE(site, output, length, messageEnd, modifiable) \
  63. FILTER_OUTPUT2_MAYBE_MODIFIABLE(site, 0, output, length, messageEnd, modifiable)
  64. #if CRYPTOPP_MSC_VERSION
  65. # pragma warning(pop)
  66. #endif
  67. #if CRYPTOPP_GCC_DIAGNOSTIC_AVAILABLE
  68. # pragma GCC diagnostic pop
  69. #endif
  70. #endif