Mercurial > minori
comparison dep/pugixml/docs/samples/load_memory.cpp @ 55:d10b6c6b432e
add xml lib, we will need to use it eventually
| author | Paper <mrpapersonic@gmail.com> |
|---|---|
| date | Tue, 26 Sep 2023 12:37:08 -0400 |
| parents | |
| children |
comparison
equal
deleted
inserted
replaced
| 54:466ac9870df9 | 55:d10b6c6b432e |
|---|---|
| 1 #include "pugixml.hpp" | |
| 2 | |
| 3 #include <iostream> | |
| 4 #include <cstring> | |
| 5 | |
| 6 int main() | |
| 7 { | |
| 8 // tag::decl[] | |
| 9 const char source[] = "<mesh name='sphere'><bounds>0 0 1 1</bounds></mesh>"; | |
| 10 size_t size = sizeof(source); | |
| 11 // end::decl[] | |
| 12 | |
| 13 pugi::xml_document doc; | |
| 14 | |
| 15 { | |
| 16 // tag::load_buffer[] | |
| 17 // You can use load_buffer to load document from immutable memory block: | |
| 18 pugi::xml_parse_result result = doc.load_buffer(source, size); | |
| 19 // end::load_buffer[] | |
| 20 | |
| 21 std::cout << "Load result: " << result.description() << ", mesh name: " << doc.child("mesh").attribute("name").value() << std::endl; | |
| 22 } | |
| 23 | |
| 24 { | |
| 25 // tag::load_buffer_inplace_begin[] | |
| 26 // You can use load_buffer_inplace to load document from mutable memory block; the block's lifetime must exceed that of document | |
| 27 char* buffer = new char[size]; | |
| 28 memcpy(buffer, source, size); | |
| 29 | |
| 30 // The block can be allocated by any method; the block is modified during parsing | |
| 31 pugi::xml_parse_result result = doc.load_buffer_inplace(buffer, size); | |
| 32 // end::load_buffer_inplace_begin[] | |
| 33 | |
| 34 std::cout << "Load result: " << result.description() << ", mesh name: " << doc.child("mesh").attribute("name").value() << std::endl; | |
| 35 | |
| 36 // tag::load_buffer_inplace_end[] | |
| 37 // You have to destroy the block yourself after the document is no longer used | |
| 38 delete[] buffer; | |
| 39 // end::load_buffer_inplace_end[] | |
| 40 } | |
| 41 | |
| 42 { | |
| 43 // tag::load_buffer_inplace_own[] | |
| 44 // You can use load_buffer_inplace_own to load document from mutable memory block and to pass the ownership of this block | |
| 45 // The block has to be allocated via pugixml allocation function - using i.e. operator new here is incorrect | |
| 46 char* buffer = static_cast<char*>(pugi::get_memory_allocation_function()(size)); | |
| 47 memcpy(buffer, source, size); | |
| 48 | |
| 49 // The block will be deleted by the document | |
| 50 pugi::xml_parse_result result = doc.load_buffer_inplace_own(buffer, size); | |
| 51 // end::load_buffer_inplace_own[] | |
| 52 | |
| 53 std::cout << "Load result: " << result.description() << ", mesh name: " << doc.child("mesh").attribute("name").value() << std::endl; | |
| 54 } | |
| 55 | |
| 56 { | |
| 57 // tag::load_string[] | |
| 58 // You can use load to load document from null-terminated strings, for example literals: | |
| 59 pugi::xml_parse_result result = doc.load_string("<mesh name='sphere'><bounds>0 0 1 1</bounds></mesh>"); | |
| 60 // end::load_string[] | |
| 61 | |
| 62 std::cout << "Load result: " << result.description() << ", mesh name: " << doc.child("mesh").attribute("name").value() << std::endl; | |
| 63 } | |
| 64 } | |
| 65 | |
| 66 // vim:et |
