Info
Table of Contents
- Memory management
- Setting values
- Accessing the Info
- Checking if the Info has a certain key
- Checking the size
- Removing specific keys
- Removing all keys
- Using Info in Info
- Further information
This page describes the C interface of CoSimIO::Info. See here for more information and the native (C++) interface.
Memory management
The CoSimIO_Info object is allocated with CoSimIO_CreateInfo and freed with CoSimIO_FreeInfo. This is crucial as otherwise memory is leaked!
// create CoSimIO_Info
CoSimIO_Info info = CoSimIO_CreateInfo();
// use info
// ...
// don't forget to free it after using it
CoSimIO_FreeInfo(info);
Setting values
The Set... methods can be used to set values in the Info. The first argument is the key (given as char*), the second is the value.
CoSimIO_Info info = CoSimIO_CreateInfo();
CoSimIO_Info_SetInt(info, "echo_level", 1);
CoSimIO_FreeInfo(info);
One Info object can hold several types:
CoSimIO_Info info = CoSimIO_CreateInfo();
CoSimIO_Info_SetInt(info, "echo_level", 1);
CoSimIO_Info_SetDouble(info, "tolerance", 0.01);
CoSimIO_Info_SetBool(info, "is_converged", 1);
CoSimIO_Info_SetString(info, "identifier", "fluid");
CoSimIO_FreeInfo(info);
Overwritting an existing key with the same or a different data type is possible:
CoSimIO_Info info = CoSimIO_CreateInfo();
CoSimIO_Info_SetInt(info, "echo_level", 1);
CoSimIO_Info_SetInt(info, "echo_level", 2);      // this is allowed
CoSimIO_Info_SetDouble(info, "echo_level", 1.5); // this is allowed
CoSimIO_FreeInfo(info);
Accessing the Info
After setting some values in the Info, they can be accessed with the Get... functions:
CoSimIO_Info info = CoSimIO_CreateInfo();
CoSimIO_Info_SetInt(info, "echo_level", 1);
int echo_level = CoSimIO_Info_GetInt(info, "echo_level");
CoSimIO_FreeInfo(info);
If the wrong function is used an error is thrown at runtime:
CoSimIO_Info info = CoSimIO_CreateInfo();
CoSimIO_Info_SetInt(info, "echo_level", 1);
double echo_level = CoSimIO_Info_GetDouble(info, "echo_level"); // Error, type mismatch, also tells which type was expected
CoSimIO_FreeInfo(info);
Checking if the Info has a certain key
The Has method can be used to check if the Info contains a specific key.
CoSimIO_Info info = CoSimIO_CreateInfo();
CoSimIO_Info_SetInt(info, "echo_level", 1);
int has_echo_level = CoSimIO_Info_Has(info, "echo_level"); // returns 1
int has_tolerance  = CoSimIO_Info_Has(info, "tolerance");  // returns 0
CoSimIO_FreeInfo(info);
Checking the size
CoSimIO_Info_Size can be used get the number of key-value pairs in the Info.
CoSimIO_Info info = CoSimIO_CreateInfo();
CoSimIO_Info_SetInt(info, "echo_level", 1);
CoSimIO_Info_Size(info); // returns 1
CoSimIO_Info_SetDouble(info, "tolerance", 0.01);
CoSimIO_Info_SetBool(info, "is_converged", 1);
CoSimIO_Info_SetString(info, "identifier", "fluid");
CoSimIO_Info_Size(info); // returns 4
CoSimIO_FreeInfo(info);
Removing specific keys
The method CoSimIO_Info_Erase can be used to remove keys from the Info. Note that it does not throw even if the key doesn’t exist.
CoSimIO_Info info = CoSimIO_CreateInfo();
CoSimIO_Info_SetInt(info, "echo_level", 1);
CoSimIO_Info_Erase(info, "echo_level");
CoSimIO_Info_Erase(info, "tolerance"); // does not throw!
CoSimIO_FreeInfo(info);
Removing all keys
The method CoSimIO_Info_Clear can be used to remove all keys from the Info.
CoSimIO_Info info = CoSimIO_CreateInfo();
CoSimIO_Info_SetInt(info, "echo_level", 1);
CoSimIO_Info_Clear(info);  // removes everything form info
CoSimIO_FreeInfo(info);
Using Info in Info
Aside from the basic types (int, double, bool, std::string) it is also possible to store an Info in an Info object. The interface is the same as for the other datatypes:
CoSimIO_Info info_1 = CoSimIO_CreateInfo();
CoSimIO_Info info_2 = CoSimIO_CreateInfo();
CoSimIO_Info_SetInfo(info_1, "sub_info", info_2); // this makes a copy of info_2
CoSimIO_Info retrieved_info = CoSimIO_Info_GetInfo(info, "sub_info"); // this is copied hence needs to be freed
CoSimIO_FreeInfo(info_1);
CoSimIO_FreeInfo(info_2);
CoSimIO_FreeInfo(retrieved_info);
This makes it possible to build more complex and hierarchical structures of information. Note that the Info is stored as a copy.
Further information
For more information check the implementation and the tests.