Может ли RapidXML API увеличить буфер?
Просматривая документацию по XmlDocument::parse(Ch*) в RapidXml, я удивляюсь, что буфер символов не является "const". Я не уверен, как это будет работать в целом, когда буфер должен расти при любых таких модификациях парсера. Будет ли библиотека расти? если я прошу его разобрать, он должен просто разобрать правильно? в противном случае это должно быть названо ParseAndPossibleModifyButLetMeKnowIfYouHadToRegrowTheBufferInWhichCaseHeyCheckThisFlagAndCopyThisPointer
или что-то типа того.
Я что-то пропустил? Я хочу понять эту библиотеку, потому что я хочу что-то простое в использовании для открытия и добавления / редактирования файлов XML на лету из C++, но если есть более простые / лучшие альтернативы , не стесняйтесь делать такие предложения в качестве ответов!
2 ответа
RapidXML старается быть на месте парсером. Когда он не может, он будет выделять память (связано с временем жизни xml_document<>
), но только при необходимости. Это довольно редко для строки на самом деле расти из-за чтения XML.
Он изменит содержимое строки (если вы не установите немодифицирующий флаг), а его объекты будут хранить ссылки на эту строку. Поэтому вам нужно убедиться, что буфер выживет достаточно долго. Но кроме этого, не о чем беспокоиться.
Rapidxml никогда не нуждается в увеличении буфера. По счастливой случайности XML-код в UTF8 всегда имеет достаточно места вокруг строк, чтобы вставить завершающие нулевые символы и развернуть встроенные символьные объекты на месте.
Таким образом, единственное изменение будет сделано в отношении содержимого буфера, а не его размера.