Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
add a get_unique_data to Extendable and test it in one example
authorFred Suter <suterf@ornl.gov>
Thu, 15 Jun 2023 15:17:47 +0000 (11:17 -0400)
committerFred Suter <suterf@ornl.gov>
Thu, 15 Jun 2023 15:18:03 +0000 (11:18 -0400)
examples/cpp/io-disk-raw/s4u-io-disk-raw.cpp
include/xbt/Extendable.hpp

index 8f2fc22..3c50a7b 100644 (file)
@@ -43,14 +43,13 @@ static void host()
   /* - Attach some user data to disk1 */
   XBT_INFO("*** Get/set data for storage element: Disk1 ***");
 
-  const auto* data = disk->get_data<std::string>();
+  auto data = disk->get_unique_data<std::string>();
 
   XBT_INFO("Get storage data: '%s'", data ? data->c_str() : "No user data");
 
   disk->set_data(new std::string("Some user data"));
-  data = disk->get_data<std::string>();
+  data = disk->get_unique_data<std::string>();
   XBT_INFO("Set and get data: '%s'", data->c_str());
-  delete data;
 }
 
 int main(int argc, char** argv)
index e315219..8dbc3ab 100644 (file)
@@ -11,6 +11,7 @@
 #include <cstddef>
 #include <functional>
 #include <limits>
+#include <memory>
 #include <vector>
 
 namespace simgrid::xbt {
@@ -109,6 +110,8 @@ public:
     extensions_[0]=data;
   }
   template <typename D> D* get_data() const { return static_cast<D*>(extensions_[0]); }
+  template <typename D> std::unique_ptr<D> get_unique_data() { return std::unique_ptr<D>(get_data<D>()); }
+
   XBT_ATTRIB_DEPRECATED_v334("Please use typed template Extendable::get_data<>()") void* get_data() const
   {
     return get_data<void>();