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