Вообщем написать самому с 0 такую функции быстрее чем написание этого ответа. А учитывая наличие всяких алис и тп - быстрее чем задавать сам вопрос
Именно! На что и намек. Парсим булевы флажки и выбираем ветки обработки. Далее некий цикл "берем из входного потока, обрабатываем, кладем в выходной поток".
Сама логика обработчика не сложная.