Caching¶
This example shows how to use caching. This can be useful for big projects where you don’t want the c++ to be parsed again and again.
Let’s consider the following c++ file:
namespace ns{
int a = 1;
}
To enable caching, you can use the following code:
from pygccxml import utils
from pygccxml import declarations
from pygccxml import parser
# Find out the c++ parser
generator_path, generator_name = utils.find_xml_generator()
# Configure the xml generator
xml_generator_config = parser.xml_generator_configuration_t(
xml_generator_path=generator_path,
xml_generator=generator_name)
# The c++ file we want to parse
filename = "example.hpp"
file_config = parser.file_configuration_t(
data=filename,
content_type=parser.CONTENT_TYPE.CACHED_SOURCE_FILE)
project_reader = parser.project_reader_t(xml_generator_config)
decls = project_reader.read_files(
[file_config],
compilation_mode=parser.COMPILATION_MODE.FILE_BY_FILE)
global_namespace = declarations.get_global_namespace(decls)
value = global_namespace.namespace("ns")
print("My name is: " + value.name)
The first time you run this example, the c++ file will be read and a xml file will be generated:
INFO Creating xml file “example.hpp.xml” from source file “example.hpp” … INFO Parsing xml file “example.hpp.xml” … My name is: ns
The second time you run the example the xml file will not be regenerated:
INFO Parsing xml file “example.hpp.xml” … My name is: ns
Of course the performance gain will be small for this example, but can be intersting for bigger projects.