00001 #ifndef CRYPTOPP_FLTRIMPL_H
00002 #define CRYPTOPP_FLTRIMPL_H
00003
00004 #if CRYPTOPP_MSC_VERSION
00005 # pragma warning(push)
00006 # pragma warning(disable: 4100)
00007 #endif
00008
00009 #if CRYPTOPP_GCC_DIAGNOSTIC_AVAILABLE
00010 # pragma GCC diagnostic push
00011 # pragma GCC diagnostic ignored "-Wunused-value"
00012 #endif
00013
00014 #define FILTER_BEGIN \
00015 switch (m_continueAt) \
00016 { \
00017 case 0: \
00018 m_inputPosition = 0;
00019
00020 #define FILTER_END_NO_MESSAGE_END_NO_RETURN \
00021 break; \
00022 default: \
00023 assert(false); \
00024 }
00025
00026 #define FILTER_END_NO_MESSAGE_END \
00027 FILTER_END_NO_MESSAGE_END_NO_RETURN \
00028 return 0;
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038 #define FILTER_OUTPUT3(site, statement, output, length, messageEnd, channel) \
00039 {\
00040 case site: \
00041 statement; \
00042 if (Output(site, output, length, messageEnd, blocking, channel)) \
00043 return STDMAX(size_t(1), length-m_inputPosition);\
00044 }
00045
00046 #define FILTER_OUTPUT2(site, statement, output, length, messageEnd) \
00047 FILTER_OUTPUT3(site, statement, output, length, messageEnd, DEFAULT_CHANNEL)
00048
00049 #define FILTER_OUTPUT(site, output, length, messageEnd) \
00050 FILTER_OUTPUT2(site, 0, output, length, messageEnd)
00051
00052 #define FILTER_OUTPUT_BYTE(site, output) \
00053 FILTER_OUTPUT(site, &(const byte &)(byte)output, 1, 0)
00054
00055 #define FILTER_OUTPUT2_MODIFIABLE(site, statement, output, length, messageEnd) \
00056 {\
00057 case site: \
00058 statement; \
00059 if (OutputModifiable(site, output, length, messageEnd, blocking)) \
00060 return STDMAX(size_t(1), length-m_inputPosition);\
00061 }
00062
00063 #define FILTER_OUTPUT_MODIFIABLE(site, output, length, messageEnd) \
00064 FILTER_OUTPUT2_MODIFIABLE(site, 0, output, length, messageEnd)
00065
00066 #define FILTER_OUTPUT2_MAYBE_MODIFIABLE(site, statement, output, length, messageEnd, modifiable) \
00067 {\
00068 case site: \
00069 statement; \
00070 if (modifiable ? OutputModifiable(site, output, length, messageEnd, blocking) : Output(site, output, length, messageEnd, blocking)) \
00071 return STDMAX(size_t(1), length-m_inputPosition);\
00072 }
00073
00074 #define FILTER_OUTPUT_MAYBE_MODIFIABLE(site, output, length, messageEnd, modifiable) \
00075 FILTER_OUTPUT2_MAYBE_MODIFIABLE(site, 0, output, length, messageEnd, modifiable)
00076
00077 #if CRYPTOPP_MSC_VERSION
00078 # pragma warning(pop)
00079 #endif
00080
00081 #if CRYPTOPP_GCC_DIAGNOSTIC_AVAILABLE
00082 # pragma GCC diagnostic pop
00083 #endif
00084
00085 #endif