mlpack 3.4.2
end_program.hpp
Go to the documentation of this file.
1
13#ifndef MLPACK_BINDINGS_CLI_END_PROGRAM_HPP
14#define MLPACK_BINDINGS_CLI_END_PROGRAM_HPP
15
17
18namespace mlpack {
19namespace bindings {
20namespace cli {
21
26inline void EndProgram()
27{
28 // Stop the CLI timers.
30
31 // Print any output.
32 std::map<std::string, util::ParamData>& parameters = IO::Parameters();
33 for (auto& it : parameters)
34 {
35 util::ParamData& d = it.second;
36 if (!d.input)
37 IO::GetSingleton().functionMap[d.tname]["OutputParam"](d, NULL, NULL);
38 }
39
40 if (IO::HasParam("verbose"))
41 {
42 Log::Info << std::endl << "Execution parameters:" << std::endl;
43
44 // Print out all the values.
45 for (auto& it : parameters)
46 {
47 // Now, figure out what type it is, and print it.
48 // We can handle strings, ints, bools, doubles.
49 util::ParamData& data = it.second;
50 std::string cliName;
51 IO::GetSingleton().functionMap[data.tname]["MapParameterName"](data,
52 NULL, (void*) &cliName);
53 Log::Info << " " << cliName << ": ";
54
55 std::string printableParam;
56 IO::GetSingleton().functionMap[data.tname]["GetPrintableParam"](data,
57 NULL, (void*) &printableParam);
58 Log::Info << printableParam << std::endl;
59 }
60
61 Log::Info << "Program timers:" << std::endl;
62 for (auto& it2 : IO::GetSingleton().timer.GetAllTimers())
63 {
64 Log::Info << " " << it2.first << ": ";
66 }
67 }
68
69 // Lastly clean up any memory. If we are holding any pointers, then we "own"
70 // them. But we may hold the same pointer twice, so we have to be careful to
71 // not delete it multiple times.
72 std::unordered_map<void*, util::ParamData*> memoryAddresses;
73 for (auto& it : parameters)
74 {
75 util::ParamData& data = it.second;
76
77 void* result;
78 IO::GetSingleton().functionMap[data.tname]["GetAllocatedMemory"](data,
79 NULL, (void*) &result);
80 if (result != NULL && memoryAddresses.count(result) == 0)
81 memoryAddresses[result] = &data;
82 }
83
84 // Now we have all the unique addresses that need to be deleted.
85 std::unordered_map<void*, util::ParamData*>::const_iterator it2;
86 it2 = memoryAddresses.begin();
87 while (it2 != memoryAddresses.end())
88 {
89 util::ParamData& data = *(it2->second);
90
91 IO::GetSingleton().functionMap[data.tname]["DeleteAllocatedMemory"](data,
92 NULL, NULL);
93
94 ++it2;
95 }
96}
97
98} // namespace cli
99} // namespace bindings
100} // namespace mlpack
101
102#endif
FunctionMapType functionMap
Definition: io.hpp:299
static IO & GetSingleton()
Retrieve the singleton.
static bool HasParam(const std::string &identifier)
See if the specified flag was found while parsing.
Timers timer
Holds the timer objects.
Definition: io.hpp:315
static std::map< std::string, util::ParamData > & Parameters()
Return a modifiable list of parameters that IO knows about.
static MLPACK_EXPORT util::PrefixedOutStream Info
Prints informational messages if –verbose is specified, prefixed with [INFO ].
Definition: log.hpp:84
void StopAllTimers()
Stop all timers.
std::map< std::string, std::chrono::microseconds > GetAllTimers()
Returns a copy of all the timers used via this interface.
void PrintTimer(const std::string &timerName)
Prints the specified timer.
void EndProgram()
Handle command-line program termination.
Definition: end_program.hpp:26
Linear algebra utility functions, generally performed on matrices or vectors.
Definition: cv.hpp:1
This structure holds all of the information about a single parameter, including its value (which is s...
Definition: param_data.hpp:53
std::string tname
Type information of this parameter.
Definition: param_data.hpp:61
bool input
True if this option is an input option (otherwise, it is output).
Definition: param_data.hpp:73