Разбор целых чисел произвольной точности с boost :: spirit

Я хотел бы создать boost :: spirit :: qi :: грамматику для произвольного целого числа. Хранение целого числа в строку просто ужасно тратит память, особенно когда целое число представлено в двоичном формате. Как можно использовать целочисленный класс произвольной точности (например, GMP или llvm :: APInt) в структуре?

2

Решение

Если у вас есть текстовый файл, который содержит ряд произвольно длинных целых чисел, тогда Qi, безусловно, можно использовать для очень эффективного разбора этого файла на отдельные числа, представленные в виде текстовых токенов. Как вы преобразуете эти токены в числа GMP, зависит от вас, но я полагаю, что механизм, предоставляемый библиотекой для ввода чисел с помощью текста, более оптимизирован, чем все, что вы, вероятно, сможете придумать.

Если вы спрашиваете, можно ли адаптировать Qi для чтения двоичного файла, содержащего произвольно длинные числа, тогда ответ — да — поддержка двоичных парсеров уже есть, смотрите здесь: http://www.boost.org/doc/libs/1_48_0/libs/spirit/doc/html/spirit/qi/reference/binary.html. Я не уверен в формате целых чисел вашей целевой математической библиотеки, я думаю, что вы могли бы связать эти примитивы вместе для непосредственного чтения двоичных представлений ваших чисел. Или вы можете создать свой собственный примитив синтаксического анализатора на основе одного из них.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]