File tree Expand file tree Collapse file tree 2 files changed +39
-0
lines changed Expand file tree Collapse file tree 2 files changed +39
-0
lines changed Original file line number Diff line number Diff line change @@ -194,6 +194,17 @@ class Module {
194
194
return load_method (method_name, nullptr , event_tracer);
195
195
}
196
196
197
+ /* *
198
+ * Unload a specific method from the program.
199
+ *
200
+ * @param[in] method_name The name of the method to unload.
201
+ *
202
+ * @returns True if the method is unloaded, false if no-op.
203
+ */
204
+ inline bool unload_method (const std::string& method_name) {
205
+ return methods_.erase (method_name);
206
+ }
207
+
197
208
/* *
198
209
* Get a method by it's name. Not recommended to use this method directly as
199
210
* an end user. It's exposed to allow for composability of module in apis that
@@ -228,6 +239,15 @@ class Module {
228
239
return load_forward (nullptr , event_tracer);
229
240
}
230
241
242
+ /* *
243
+ * Unload the 'forward' method from the program.
244
+ *
245
+ * @returns True if the 'forward' method is unloaded, false if no-op.
246
+ */
247
+ inline bool unload_forward () {
248
+ return unload_method (" forward" );
249
+ }
250
+
231
251
/* *
232
252
* Checks if a specific method is loaded.
233
253
*
Original file line number Diff line number Diff line change @@ -91,6 +91,25 @@ TEST_F(ModuleTest, TestLoadMethod) {
91
91
EXPECT_TRUE (module .is_loaded ());
92
92
}
93
93
94
+ TEST_F (ModuleTest, TestUnloadMethod) {
95
+ Module module (model_path_);
96
+
97
+ EXPECT_FALSE (module .is_method_loaded (" forward" ));
98
+ const auto errorLoad = module .load_method (" forward" );
99
+ EXPECT_EQ (errorLoad, Error::Ok);
100
+ EXPECT_TRUE (module .is_method_loaded (" forward" ));
101
+ // Unload method
102
+ EXPECT_TRUE (module .unload_method (" forward" ));
103
+ EXPECT_FALSE (module .is_method_loaded (" forward" ));
104
+ // Try unload method again
105
+ EXPECT_FALSE (module .unload_method (" forward" ));
106
+ // Load method again
107
+ const auto errorReload = module .load_method (" forward" );
108
+ EXPECT_EQ (errorReload, Error::Ok);
109
+ EXPECT_TRUE (module .is_method_loaded (" forward" ));
110
+ EXPECT_TRUE (module .is_loaded ());
111
+ }
112
+
94
113
TEST_F (ModuleTest, TestLoadNonExistentMethod) {
95
114
Module module (model_path_);
96
115
You can’t perform that action at this time.
0 commit comments