Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
Разработка программного обеспечения

Tutorial

Boost , ,

Tutorial

2.2.1. Overview: InputFilters, OutputFilters and Filter Helpers

Фильтры используются для изменения последовательностей символов. Например, вы можете использовать фильтр для замены всех экземпляров одного слова другим, для преобразования всех алфавитных символов в нижний регистр или для шифрования документа. Иногда фильтр является просто наблюдателем; в этом случае фильтрованная последовательность символов такая же, как и нефильтрованная последовательность. Например, вы можете использовать фильтр для подсчета количества происшествий данного слова.

InputFilters and OutputFilters

Библиотека Iostreams поддерживает две основные категории фильтров:иФильтры. Входные фильтры представляют собой модель фильтрации “pull”: источник нефильтрованных данных предоставляется — представлен какИсточник— и ожидается, что фильтр генерирует определенное количество символов фильтрованной последовательности. Отфильтрованная последовательность генерируется постепенно, что означает, что для фильтрации заданной последовательности символов фильтр обычно должен вызываться несколько раз.Фильтрыпредставляют собой модель фильтрации “push”: предусмотрена последовательность нефильтрованных символов иSink, и ожидается, что фильтр фильтрует символы и записывает их в Sink. Как и InputFilters, OutputFilters также обрабатывает данные постепенно.

Простейшие InputFilters и OutputFilters обрабатывают символы по одному. Этот тип фильтра прост в написании, но менее эффективен, чем фильтры, которые обрабатывают несколько символов одновременно. Фильтры, которые обрабатывают несколько символов одновременно, называются фильтрамис несколькими символами.

Filter Helpers

Библиотека Iostreams предоставляет несколько утилит, облегчающих написание фильтров:

  • aggregate_filter allows a programmer to define a Filter by reading unfiltered data from one std::vector and writing filtered data to another std::vector.
  • stdio_filter allows a programmer to define a Filter by reading unfiltered data from standard input and writing filtered data to standard output.
  • symmetric_filter allows a programmer to define a Filter by reading unfiltered data from one array and writing filtered data to another array.
  • finite_state_filter allows a programmer to define a Filter as a finite state machine. This component is included with the example filters; it is not currently an official part of the library.

Selecting a Filter Concept

Предположим, вам нужно написать фильтр для выполнения заданной задачи фильтрации. Как вы решаете, писать лиInputFilterилиOutputFilter, или использовать одного из помощников фильтра? Первые два фильтра, упомянутые выше,<aggregate_filter>и<stdio_filter>, имеют высокую память и работают только с последовательностями символов, которые имеют четко определенный конец. Они позволяют алгоритмам фильтрации быть выраженными очень простым способом, и поэтому обеспечивают хорошее введение в фильтрацию. Третий помощник фильтра,<symmetric_filter>, полезен для определения фильтра на основе API C-языка, такого как zlib, libbz2 или OpenSSL. Если ни один из помощников фильтра не подходит, вы должны написать InputFilter, если вы планируете использовать фильтр для чтения, и OutputFilter, если вы планируете использовать его для письма. Однако в некоторых случаях алгоритм гораздо проще выразить как InputFilter, чем как OutputFilter, илинаоборот. В таких случаях вы можете написать фильтр в зависимости от того, какой способ проще, и использовать шаблон класса<inverse>или шаблон функции<invert>, чтобы превратить InputFilter в OutputFilter илинаоборот.

Во всех, кроме последнего из приведенных ниже примеров фильтрации, я сначала покажу, как реализовать алгоритм с использованием<stdio_filter>, прежде чем реализовать его с нуля в качестве фильтра ввода или фильтра вывода.


Статья Tutorial раздела может быть полезна для разработчиков на c++ и boost.




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.



:: Главная :: ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-08-30 11:47:00
2025-07-05 08:35:35/0.003809928894043/0