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