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

Character Sets

Boost , ,

Character Sets

Набор символовchsetсоответствует набору символов в конечном диапазоне, ограниченном пределами его параметра шаблона.Шарт. Этот класс представляет собой оптимизацию парсера, который действует на набор отдельных символов. Класс шаблона параметризируется по типу символаШарти может эффективно работать с 8, 16 и 32 и даже 64-битными символами.

    template <typename CharT = char>
    class chset;

chsetпостроен из букв (например,'x'),ch_pилиchlit<>,range_pилидиапазон<>,любойchar_pиnothing_p(см.примитивы) или копия, построенная из другогонабора. Классchsetиспользует схему копирования в записи, которая позволяет легко передавать экземпляры по значению.

Sparse bit vectors

To accomodate 16/32 and 64 bit characters, the chset class statically switches from a std::bitset implementation when the character type is not greater than 8 bits, to a sparse bit/boolean set which uses a sorted vector of disjoint ranges (range_run). The set is constructed from ranges such that adjacent or overlapping ranges are coalesced.

range_runs are very space-economical in situations where there are lots of ranges and a few individual disjoint values. Searching is O(log n) where n is the number of ranges.

Примеры:

    chset<> s1('x');
    chset<> s2(anychar_p - s1);

Необязательно, наборы символов также могут быть построены с использованием строки определения, следующей за синтаксисом, который напоминает наборы символов с регулярным выражением в стиле posix, за исключением того, что двойные цитаты ограничивают элементы набора вместо квадратных скобок и нет специального отрицания^символа.

    range = anychar_p >> '-' >> anychar_p;
    set = *(range_p | anychar_p);

Поскольку мы определяем набор с помощью строки C, применяются обычные правила синтаксиса строк C/C++. Примеры:

    chset<> s1("a-zA-Z");       // alphabetic characters
    chset<> s2("0-9a-fA-F");    // hexadecimal characters
    chset<> s3("actgACTG");     // DNA identifiers
    chset<> s4("\x7f\x7e");     // Hexadecimal 0x7F and 0x7E

Применяются стандартные операторы набора Spirit (см.операторы) плюс дополнительный оператор обратного набора символов (отрицание~):

Character set operators
~a Set inverse
a | b Set union
a & Set intersection
a - b Set difference
a ^ b Set xor

где операнды a и b оба являютсячеламиили один из операндов является либо буквальным символом,ch_pилиchlit,range_pилиrange,anychar_pилиnothing_p. Специальные оптимизированные перегрузки предусмотрены для операндовanychar_pиnothing_p. Опрандnothing_pпреобразуется в пустой набор, в то время как операндanychar_pпреобразуется в набор, содержащий элементы полного диапазона используемого типа символов (например, 0-255 для неподписанных 8-битных загонов).

Особым случаем является~anychar_p, который не даетничего_p, но~nothing_pявляется незаконным. Инверсияanychar_pасимметрична, однопутная поездка сравнима с преобразованиемT*впустоту*.

Special conversions
chset<CharT>(nothing_p) empty set
chset<CharT>(anychar_p) full range of CharT (e.g. 0-255 for unsigned 8 bit chars)
~anychar_p nothing_p
~nothing_p illegal



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




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



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


реклама


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

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