From fd59c94828d56624b725b65c21dee0a7c5281e7f Mon Sep 17 00:00:00 2001 From: Gabriel Corona Date: Wed, 9 Dec 2015 16:03:13 +0100 Subject: [PATCH] Try to fix header dependency hell Add simgrid/forward.h to forward-declare problematic stuff I could not untangle. --- examples/s4u/basic/s4u_basic.cpp | 25 +-- examples/s4u/io/s4u_io_test.cpp | 28 +-- include/simgrid/forward.h | 303 ++++++++++++++++++++++++++ include/simgrid/host.h | 12 +- include/simgrid/platf.h | 274 +---------------------- src/include/simgrid/platf_interface.h | 4 + src/include/surf/surf.h | 7 +- tools/cmake/DefinePackages.cmake | 1 + 8 files changed, 347 insertions(+), 307 deletions(-) create mode 100644 include/simgrid/forward.h diff --git a/examples/s4u/basic/s4u_basic.cpp b/examples/s4u/basic/s4u_basic.cpp index 678d16fd8c..6bbfdecbd6 100644 --- a/examples/s4u/basic/s4u_basic.cpp +++ b/examples/s4u/basic/s4u_basic.cpp @@ -3,37 +3,36 @@ /* This program is free software; you can redistribute it and/or modify it * under the terms of the license (GNU LGPL) which comes with this package. */ -#include "simgrid/s4u.h" +#include -using namespace simgrid; -using namespace s4u; +#include "simgrid/s4u.h" XBT_LOG_NEW_DEFAULT_CATEGORY(s4u_test, "a sample log category"); -class Worker : Actor { +class Worker : simgrid::s4u::Actor { public: - Worker(const char*procname, Host *host,int argc, char **argv) - : s4u::Actor(procname,host,argc,argv){} + Worker(const char*procname, simgrid::s4u::Host *host,int argc, char **argv) + : simgrid::s4u::Actor(procname,host,argc,argv){} int main(int argc, char **argv) { XBT_INFO("Hello s4u, I'm ready to serve"); - char *msg = (char*)recv(*Mailbox::byName("worker")); + char *msg = (char*)recv(*simgrid::s4u::Mailbox::byName("worker")); XBT_INFO("I received '%s'",msg); XBT_INFO("I'm done. See you."); return 1; } }; -class Master : Actor { +class Master : simgrid::s4u::Actor { public: - Master(const char*procname, Host *host,int argc, char **argv) + Master(const char*procname, simgrid::s4u::Host *host,int argc, char **argv) : Actor(procname,host,argc,argv){} int main(int argc, char **argv) { const char *msg = "GaBuZoMeu"; XBT_INFO("Hello s4u, I have something to send"); - send(*Mailbox::byName("worker"), xbt_strdup(msg), strlen(msg)); + send(*simgrid::s4u::Mailbox::byName("worker"), xbt_strdup(msg), strlen(msg)); XBT_INFO("I'm done. See you."); return 1; @@ -42,11 +41,11 @@ public: int main(int argc, char **argv) { - Engine *e = new Engine(&argc,argv); + simgrid::s4u::Engine *e = new simgrid::s4u::Engine(&argc,argv); e->loadPlatform("../../platforms/two_hosts_platform.xml"); - new Worker("worker", Host::byName("host0"), 0, NULL); - new Master("master", Host::byName("host1"), 0, NULL); + new Worker("worker", simgrid::s4u::Host::byName("host0"), 0, NULL); + new Master("master", simgrid::s4u::Host::byName("host1"), 0, NULL); e->run(); return 0; } diff --git a/examples/s4u/io/s4u_io_test.cpp b/examples/s4u/io/s4u_io_test.cpp index 87a06bfb77..eee430357a 100644 --- a/examples/s4u/io/s4u_io_test.cpp +++ b/examples/s4u/io/s4u_io_test.cpp @@ -3,26 +3,25 @@ /* This program is free software; you can redistribute it and/or modify it * under the terms of the license (GNU LGPL) which comes with this package. */ +#include +#include #include #include "simgrid/s4u.h" -using namespace simgrid; -using namespace s4u; - XBT_LOG_NEW_DEFAULT_CATEGORY(s4u_test, "a sample log category"); -class myHost : Actor { +class myHost : simgrid::s4u::Actor { public: - myHost(const char*procname, Host *host,int argc, char **argv) -: s4u::Actor(procname,host,argc,argv){} + myHost(const char*procname, simgrid::s4u::Host *host,int argc, char **argv) +: simgrid::s4u::Actor(procname,host,argc,argv){} - void show_info(boost::unordered_map &mounts) { - XBT_INFO("Storage info on %s:", Host::current()->name()); + void show_info(boost::unordered_map &mounts) { + XBT_INFO("Storage info on %s:", simgrid::s4u::Host::current()->name()); for (const auto&kv : mounts) { const char* mountpoint = kv.first.c_str(); - Storage &storage = kv.second; + simgrid::s4u::Storage &storage = kv.second; // Retrieve disk's information sg_size_t free_size = storage.size_free(); @@ -35,13 +34,14 @@ public: } int main(int argc, char **argv) { - boost::unordered_map &mounts = Host::current()->mountedStorages(); + boost::unordered_map &mounts = + simgrid::s4u::Host::current()->mountedStorages(); show_info(mounts); // Open an non-existing file to create it const char *filename = "/home/tmp/data.txt"; - File *file = new File(filename, NULL); + simgrid::s4u::File *file = new simgrid::s4u::File(filename, NULL); sg_size_t write, read, file_size; write = file->write(200000); // Write 200,000 bytes @@ -60,7 +60,7 @@ public: write = file->write(100000); // Write 100,000 bytes XBT_INFO("Write %llu bytes on %s", write, filename); - Storage &storage = Storage::byName("Disk4"); + simgrid::s4u::Storage &storage = simgrid::s4u::Storage::byName("Disk4"); // Now rename file from ./tmp/data.txt to ./tmp/simgrid.readme const char *newpath = "/home/tmp/simgrid.readme"; @@ -105,10 +105,10 @@ public: }; int main(int argc, char **argv) { - Engine *e = new Engine(&argc,argv); + simgrid::s4u::Engine *e = new simgrid::s4u::Engine(&argc,argv); e->loadPlatform("../../platforms/storage/storage.xml"); - new myHost("host", Host::byName("denise"), 0, NULL); + new myHost("host", simgrid::s4u::Host::byName("denise"), 0, NULL); e->run(); return 0; } diff --git a/include/simgrid/forward.h b/include/simgrid/forward.h new file mode 100644 index 0000000000..2f6279c8e1 --- /dev/null +++ b/include/simgrid/forward.h @@ -0,0 +1,303 @@ +/* Copyright (c) 2004-2015. The SimGrid Team. + * All rights reserved. */ + +/* This program is free software; you can redistribute it and/or modify it + * under the terms of the license (GNU LGPL) which comes with this package. */ + +#ifndef SG_PLATF_TYPES_H +#define SG_PLATF_TYPES_H + +#include +#include + +#ifdef __cplusplus + +class Cpu; +class RoutingEdge; + +#else + +typedef struct Cpu Cpu; +typedef struct RoutingEdge RoutingEdge; + +#endif + +typedef Cpu *surf_cpu_t; +typedef RoutingEdge *routing_edge_t; +typedef RoutingEdge *sg_routing_edge_t; + + + +// Types which are in fact dictelmt: + +typedef xbt_dictelm_t sg_host_t; +typedef xbt_dictelm_t sg_storage_t; + + +typedef struct tmgr_trace *tmgr_trace_t; /**< Opaque structure defining an availability trace */ + +typedef void *sg_routing_link_t; /* FIXME:The actual type is model-dependent so use void* instead*/ + +/** @ingroup SURF_interface +* @brief Defines whether a given resource is working or not */ +typedef enum { + SURF_RESOURCE_ON = 1, /**< Up & ready */ + SURF_RESOURCE_OFF = 0 /**< Down & broken */ +} e_surf_resource_state_t; + +typedef enum { + SURF_LINK_FULLDUPLEX = 2, + SURF_LINK_SHARED = 1, + SURF_LINK_FATPIPE = 0 +} e_surf_link_sharing_policy_t; + +typedef enum { + SURF_TRACE_CONNECT_KIND_HOST_AVAIL = 4, + SURF_TRACE_CONNECT_KIND_POWER = 3, + SURF_TRACE_CONNECT_KIND_LINK_AVAIL = 2, + SURF_TRACE_CONNECT_KIND_BANDWIDTH = 1, + SURF_TRACE_CONNECT_KIND_LATENCY = 0 +} e_surf_trace_connect_kind_t; + +typedef enum { + SURF_PROCESS_ON_FAILURE_DIE = 1, + SURF_PROCESS_ON_FAILURE_RESTART = 0 +} e_surf_process_on_failure_t; + +typedef enum { + SURF_CLUSTER_FAT_TREE=2, + SURF_CLUSTER_FLAT = 1, + SURF_CLUSTER_TORUS = 0 +} e_surf_cluster_topology_t; + + +/** @ingroup m_datatypes_management_details + * @brief Type for any simgrid size + */ +typedef unsigned long long sg_size_t; + +/** @ingroup m_datatypes_management_details + * @brief Type for any simgrid offset + */ +typedef long long sg_offset_t; + +/* + * Platform creation functions. Instead of passing 123 arguments to the creation functions + * (one for each possible XML attribute), we pass structures containing them all. It removes the + * chances of switching arguments by error, and reduce the burden when we add a new attribute: + * old models can just continue to ignore it without having to update their headers. + * + * It shouldn't be too costly at runtime, provided that structures living on the stack are + * used, instead of malloced structures. + */ + +typedef struct { + const char* id; + xbt_dynar_t speed_peak; + int pstate; + int core_amount; + double speed_scale; + tmgr_trace_t speed_trace; + e_surf_resource_state_t initial_state; + tmgr_trace_t state_trace; + const char* coord; + xbt_dict_t properties; +} s_sg_platf_host_cbarg_t, *sg_platf_host_cbarg_t; + +#define SG_PLATF_HOST_INITIALIZER { \ + NULL, 0, 1, 1, 1., NULL, SURF_RESOURCE_ON, NULL, \ + NULL, NULL \ +} + +typedef struct { + const char* id; + const char* link_up; + const char* link_down; +} s_sg_platf_host_link_cbarg_t, *sg_platf_host_link_cbarg_t; + +#define SG_PLATF_HOST_LINK_INITIALIZER {NULL,NULL,NULL} + +typedef struct { + const char* id; + const char* coord; +} s_sg_platf_router_cbarg_t, *sg_platf_router_cbarg_t; + +#define SG_PLATF_ROUTER_INITIALIZER {NULL,NULL} + +typedef struct { + const char* id; + double bandwidth; + tmgr_trace_t bandwidth_trace; + double latency; + tmgr_trace_t latency_trace; + e_surf_resource_state_t state; + tmgr_trace_t state_trace; + e_surf_link_sharing_policy_t policy; + xbt_dict_t properties; +} s_sg_platf_link_cbarg_t, *sg_platf_link_cbarg_t; + +#define SG_PLATF_LINK_INITIALIZER {\ + NULL, 0., NULL, 0., NULL, SURF_RESOURCE_ON, \ + NULL, SURF_LINK_SHARED, NULL \ +} + +typedef struct s_sg_platf_peer_cbarg *sg_platf_peer_cbarg_t; +typedef struct s_sg_platf_peer_cbarg { + const char* id; + double speed; + double bw_in; + double bw_out; + double lat; + const char* coord; + tmgr_trace_t availability_trace; + tmgr_trace_t state_trace; +} s_sg_platf_peer_cbarg_t; + +#define SG_PLATF_PEER_INITIALIZER {NULL,0.0,0.0,0.0,0.0,NULL,NULL,NULL} + +typedef struct s_sg_platf_route_cbarg *sg_platf_route_cbarg_t; +typedef struct s_sg_platf_route_cbarg { + int symmetrical; + const char *src; + const char *dst; + sg_routing_edge_t gw_src; + sg_routing_edge_t gw_dst; + xbt_dynar_t link_list; +} s_sg_platf_route_cbarg_t; + +#define SG_PLATF_ROUTE_INITIALIZER {1,NULL,NULL,NULL,NULL,NULL} + +typedef struct s_sg_platf_cluster_cbarg *sg_platf_cluster_cbarg_t; +typedef struct s_sg_platf_cluster_cbarg { + const char* id; + const char* prefix; + const char* suffix; + const char* radical; + double speed; + int core_amount; + double bw; + double lat; + double bb_bw; + double bb_lat; + double loopback_bw; + double loopback_lat; + double limiter_link; + e_surf_cluster_topology_t topology; + const char* topo_parameters; + xbt_dict_t properties; + const char* router_id; + e_surf_link_sharing_policy_t sharing_policy; + e_surf_link_sharing_policy_t bb_sharing_policy; + const char* availability_trace; //don't convert to tmgr_trace_t since there is a trace per host and some rewriting is needed + const char* state_trace; +} s_sg_platf_cluster_cbarg_t; + +#define SG_PLATF_CLUSTER_INITIALIZER {NULL,NULL,NULL,NULL,0.0,1 \ + ,1.,1.,0.,0.,0.,0.,0. \ + ,SURF_CLUSTER_FLAT,NULL,NULL,NULL, \ + SURF_LINK_SHARED,SURF_LINK_SHARED,NULL \ + ,NULL} + +typedef struct s_sg_platf_cabinet_cbarg *sg_platf_cabinet_cbarg_t; +typedef struct s_sg_platf_cabinet_cbarg { + const char* id; + const char* prefix; + const char* suffix; + const char* radical; + double speed; + double bw; + double lat; +} s_sg_platf_cabinet_cbarg_t; + +#define SG_PLATF_CABINET_INITIALIZER {NULL,NULL,NULL,NULL,0.0,0.0,0.0} + +typedef struct { + const char* id; + const char* type_id; + const char* content; + const char* content_type; + xbt_dict_t properties; + const char* attach; +} s_sg_platf_storage_cbarg_t, *sg_platf_storage_cbarg_t; + +#define SG_PLATF_STORAGE_INITIALIZER {NULL,NULL,NULL,NULL,NULL,NULL} + +typedef struct { + const char* id; + const char* model; + const char* content; + const char* content_type; + xbt_dict_t properties; + xbt_dict_t model_properties; + sg_size_t size; +} s_sg_platf_storage_type_cbarg_t, *sg_platf_storage_type_cbarg_t; + +#define SG_PLATF_STORAGE_TYPE_INITIALIZER {NULL,NULL,NULL,NULL,NULL,NULL} + +typedef struct { + const char* type_id; + const char* name; +} s_sg_platf_mstorage_cbarg_t, *sg_platf_mstorage_cbarg_t; + +#define SG_PLATF_MSTORAGE_INITIALIZER {NULL,NULL} + +typedef struct { + const char* storageId; + const char* name; +} s_sg_platf_mount_cbarg_t, *sg_platf_mount_cbarg_t; + +#define SG_PLATF_MOUNT_INITIALIZER {NULL,NULL} + +typedef struct s_sg_platf_prop_cbarg *sg_platf_prop_cbarg_t; +typedef struct s_sg_platf_prop_cbarg { + const char *id; + const char *value; +} s_sg_platf_prop_cbarg_t; + +#define SG_PLATF_PROP_INITIALIZER {NULL,NULL} + +typedef struct s_sg_platf_trace_cbarg *sg_platf_trace_cbarg_t; +typedef struct s_sg_platf_trace_cbarg { + const char *id; + const char *file; + double periodicity; + const char *pc_data; +} s_sg_platf_trace_cbarg_t; + +#define SG_PLATF_TRACE_INITIALIZER {NULL,NULL,0.0,NULL} + +typedef struct s_sg_platf_trace_connect_cbarg *sg_platf_trace_connect_cbarg_t; +typedef struct s_sg_platf_trace_connect_cbarg { + e_surf_trace_connect_kind_t kind; + const char *trace; + const char *element; +} s_sg_platf_trace_connect_cbarg_t; + +#define SG_PLATF_TRACE_CONNECT_INITIALIZER {SURF_TRACE_CONNECT_KIND_LATENCY,NULL,NULL} + +typedef struct s_sg_platf_process_cbarg *sg_platf_process_cbarg_t; +typedef struct s_sg_platf_process_cbarg { + const char **argv; + int argc; + xbt_dict_t properties; + const char *host; + const char *function; + double start_time; + double kill_time; + e_surf_process_on_failure_t on_failure; +} s_sg_platf_process_cbarg_t; + +#define SG_PLATF_PROCESS_INITIALIZER {NULL,0,NULL,NULL,NULL,-1.0,-1.0,SURF_PROCESS_ON_FAILURE_DIE} + +typedef struct s_sg_platf_AS_cbarg *sg_platf_AS_cbarg_t; +typedef struct s_sg_platf_AS_cbarg { + const char *id; + int routing; +} s_sg_platf_AS_cbarg_t; + +#define SG_PLATF_AS_INITIALIZER {NULL,0} + +/** opaque structure defining a event generator for availability based on a probability distribution */ +typedef struct probabilist_event_generator *probabilist_event_generator_t; + +#endif diff --git a/include/simgrid/host.h b/include/simgrid/host.h index c6fb94364b..03040e825f 100644 --- a/include/simgrid/host.h +++ b/include/simgrid/host.h @@ -9,9 +9,12 @@ #include #include + +#include +#include + SG_BEGIN_DECL() -typedef xbt_dictelm_t sg_host_t; XBT_PUBLIC(sg_host_t) sg_host_by_name(const char *name); XBT_PUBLIC(sg_host_t) sg_host_by_name_or_create(const char *name); static XBT_INLINE char *sg_host_get_name(sg_host_t host){ @@ -49,17 +52,14 @@ XBT_PUBLIC(void) sg_host_simix_set(sg_host_t host, smx_host_priv_t priv); XBT_PUBLIC(void) sg_host_simix_destroy(sg_host_t host); // ========== SURF CPU ============ -DEFINE_EXTERNAL_CLASS(Cpu); -typedef Cpu *surf_cpu_t; XBT_PUBLIC(surf_cpu_t) sg_host_surfcpu(sg_host_t host); XBT_PUBLIC(void) sg_host_surfcpu_set(sg_host_t host, surf_cpu_t cpu); XBT_PUBLIC(void) sg_host_surfcpu_register(sg_host_t host, surf_cpu_t cpu); XBT_PUBLIC(void) sg_host_surfcpu_destroy(sg_host_t host); // ========== RoutingEdge ============ -DEFINE_EXTERNAL_CLASS(RoutingEdge); -XBT_PUBLIC(RoutingEdge*) sg_host_edge(sg_host_t host); -XBT_PUBLIC(void) sg_host_edge_set(sg_host_t host, RoutingEdge* edge); +XBT_PUBLIC(routing_edge_t) sg_host_edge(sg_host_t host); +XBT_PUBLIC(void) sg_host_edge_set(sg_host_t host, routing_edge_t edge); XBT_PUBLIC(void) sg_host_edge_destroy(sg_host_t host, int do_callback); diff --git a/include/simgrid/platf.h b/include/simgrid/platf.h index 0a0df2582b..bff42d7fef 100644 --- a/include/simgrid/platf.h +++ b/include/simgrid/platf.h @@ -11,52 +11,16 @@ #include #include +#include "forward.h" SG_BEGIN_DECL() -typedef void *sg_routing_link_t; /* FIXME:The actual type is model-dependent so use void* instead*/ -typedef RoutingEdge *sg_routing_edge_t; +static inline char* sg_storage_name(sg_storage_t storage) { + return storage->key; +} XBT_PUBLIC(sg_routing_edge_t) sg_routing_edge_by_name_or_null(const char *name); -/** @ingroup SURF_interface -* @brief Defines whether a given resource is working or not */ -typedef enum { - SURF_RESOURCE_ON = 1, /**< Up & ready */ - SURF_RESOURCE_OFF = 0 /**< Down & broken */ -} e_surf_resource_state_t; - -typedef enum { - SURF_LINK_FULLDUPLEX = 2, - SURF_LINK_SHARED = 1, - SURF_LINK_FATPIPE = 0 -} e_surf_link_sharing_policy_t; - -typedef enum { - SURF_TRACE_CONNECT_KIND_HOST_AVAIL = 4, - SURF_TRACE_CONNECT_KIND_POWER = 3, - SURF_TRACE_CONNECT_KIND_LINK_AVAIL = 2, - SURF_TRACE_CONNECT_KIND_BANDWIDTH = 1, - SURF_TRACE_CONNECT_KIND_LATENCY = 0 -} e_surf_trace_connect_kind_t; - -typedef enum { - SURF_PROCESS_ON_FAILURE_DIE = 1, - SURF_PROCESS_ON_FAILURE_RESTART = 0 -} e_surf_process_on_failure_t; - -typedef enum { - SURF_CLUSTER_FAT_TREE=2, - SURF_CLUSTER_FLAT = 1, - SURF_CLUSTER_TORUS = 0 -} e_surf_cluster_topology_t; - - -typedef struct tmgr_trace *tmgr_trace_t; /**< Opaque structure defining an availability trace */ - -/** opaque structure defining a event generator for availability based on a probability distribution */ -typedef struct probabilist_event_generator *probabilist_event_generator_t; - XBT_PUBLIC(tmgr_trace_t) tmgr_trace_new_from_file(const char *filename); XBT_PUBLIC(tmgr_trace_t) tmgr_trace_new_from_string(const char *id, const char *input, @@ -82,236 +46,6 @@ XBT_PUBLIC(probabilist_event_generator_t) tmgr_event_generator_new_weibull(const double scale, double shape); -typedef xbt_dictelm_t sg_storage_t; -static inline char* sg_storage_name(sg_storage_t storage) { - return storage->key; -} -/** @ingroup m_datatypes_management_details - * @brief Type for any simgrid size - */ -typedef unsigned long long sg_size_t; - -/** @ingroup m_datatypes_management_details - * @brief Type for any simgrid offset - */ -typedef long long sg_offset_t; - -/* - * Platform creation functions. Instead of passing 123 arguments to the creation functions - * (one for each possible XML attribute), we pass structures containing them all. It removes the - * chances of switching arguments by error, and reduce the burden when we add a new attribute: - * old models can just continue to ignore it without having to update their headers. - * - * It shouldn't be too costly at runtime, provided that structures living on the stack are - * used, instead of malloced structures. - */ - -typedef struct { - const char* id; - xbt_dynar_t speed_peak; - int pstate; - int core_amount; - double speed_scale; - tmgr_trace_t speed_trace; - e_surf_resource_state_t initial_state; - tmgr_trace_t state_trace; - const char* coord; - xbt_dict_t properties; -} s_sg_platf_host_cbarg_t, *sg_platf_host_cbarg_t; - -#define SG_PLATF_HOST_INITIALIZER { \ - NULL, 0, 1, 1, 1., NULL, SURF_RESOURCE_ON, NULL, \ - NULL, NULL \ -} - -typedef struct { - const char* id; - const char* link_up; - const char* link_down; -} s_sg_platf_host_link_cbarg_t, *sg_platf_host_link_cbarg_t; - -#define SG_PLATF_HOST_LINK_INITIALIZER {NULL,NULL,NULL} - -typedef struct { - const char* id; - const char* coord; -} s_sg_platf_router_cbarg_t, *sg_platf_router_cbarg_t; - -#define SG_PLATF_ROUTER_INITIALIZER {NULL,NULL} - -typedef struct { - const char* id; - double bandwidth; - tmgr_trace_t bandwidth_trace; - double latency; - tmgr_trace_t latency_trace; - e_surf_resource_state_t state; - tmgr_trace_t state_trace; - e_surf_link_sharing_policy_t policy; - xbt_dict_t properties; -} s_sg_platf_link_cbarg_t, *sg_platf_link_cbarg_t; - -#define SG_PLATF_LINK_INITIALIZER {\ - NULL, 0., NULL, 0., NULL, SURF_RESOURCE_ON, \ - NULL, SURF_LINK_SHARED, NULL \ -} - -typedef struct s_sg_platf_peer_cbarg *sg_platf_peer_cbarg_t; -typedef struct s_sg_platf_peer_cbarg { - const char* id; - double speed; - double bw_in; - double bw_out; - double lat; - const char* coord; - tmgr_trace_t availability_trace; - tmgr_trace_t state_trace; -} s_sg_platf_peer_cbarg_t; - -#define SG_PLATF_PEER_INITIALIZER {NULL,0.0,0.0,0.0,0.0,NULL,NULL,NULL} - -typedef struct s_sg_platf_route_cbarg *sg_platf_route_cbarg_t; -typedef struct s_sg_platf_route_cbarg { - int symmetrical; - const char *src; - const char *dst; - sg_routing_edge_t gw_src; - sg_routing_edge_t gw_dst; - xbt_dynar_t link_list; -} s_sg_platf_route_cbarg_t; - -#define SG_PLATF_ROUTE_INITIALIZER {1,NULL,NULL,NULL,NULL,NULL} - -typedef struct s_sg_platf_cluster_cbarg *sg_platf_cluster_cbarg_t; -typedef struct s_sg_platf_cluster_cbarg { - const char* id; - const char* prefix; - const char* suffix; - const char* radical; - double speed; - int core_amount; - double bw; - double lat; - double bb_bw; - double bb_lat; - double loopback_bw; - double loopback_lat; - double limiter_link; - e_surf_cluster_topology_t topology; - const char* topo_parameters; - xbt_dict_t properties; - const char* router_id; - e_surf_link_sharing_policy_t sharing_policy; - e_surf_link_sharing_policy_t bb_sharing_policy; - const char* availability_trace; //don't convert to tmgr_trace_t since there is a trace per host and some rewriting is needed - const char* state_trace; -} s_sg_platf_cluster_cbarg_t; - -#define SG_PLATF_CLUSTER_INITIALIZER {NULL,NULL,NULL,NULL,0.0,1 \ - ,1.,1.,0.,0.,0.,0.,0. \ - ,SURF_CLUSTER_FLAT,NULL,NULL,NULL, \ - SURF_LINK_SHARED,SURF_LINK_SHARED,NULL \ - ,NULL} - -typedef struct s_sg_platf_cabinet_cbarg *sg_platf_cabinet_cbarg_t; -typedef struct s_sg_platf_cabinet_cbarg { - const char* id; - const char* prefix; - const char* suffix; - const char* radical; - double speed; - double bw; - double lat; -} s_sg_platf_cabinet_cbarg_t; - -#define SG_PLATF_CABINET_INITIALIZER {NULL,NULL,NULL,NULL,0.0,0.0,0.0} - -typedef struct { - const char* id; - const char* type_id; - const char* content; - const char* content_type; - xbt_dict_t properties; - const char* attach; -} s_sg_platf_storage_cbarg_t, *sg_platf_storage_cbarg_t; - -#define SG_PLATF_STORAGE_INITIALIZER {NULL,NULL,NULL,NULL,NULL,NULL} - -typedef struct { - const char* id; - const char* model; - const char* content; - const char* content_type; - xbt_dict_t properties; - xbt_dict_t model_properties; - sg_size_t size; -} s_sg_platf_storage_type_cbarg_t, *sg_platf_storage_type_cbarg_t; - -#define SG_PLATF_STORAGE_TYPE_INITIALIZER {NULL,NULL,NULL,NULL,NULL,NULL} - -typedef struct { - const char* type_id; - const char* name; -} s_sg_platf_mstorage_cbarg_t, *sg_platf_mstorage_cbarg_t; - -#define SG_PLATF_MSTORAGE_INITIALIZER {NULL,NULL} - -typedef struct { - const char* storageId; - const char* name; -} s_sg_platf_mount_cbarg_t, *sg_platf_mount_cbarg_t; - -#define SG_PLATF_MOUNT_INITIALIZER {NULL,NULL} - -typedef struct s_sg_platf_prop_cbarg *sg_platf_prop_cbarg_t; -typedef struct s_sg_platf_prop_cbarg { - const char *id; - const char *value; -} s_sg_platf_prop_cbarg_t; - -#define SG_PLATF_PROP_INITIALIZER {NULL,NULL} - -typedef struct s_sg_platf_trace_cbarg *sg_platf_trace_cbarg_t; -typedef struct s_sg_platf_trace_cbarg { - const char *id; - const char *file; - double periodicity; - const char *pc_data; -} s_sg_platf_trace_cbarg_t; - -#define SG_PLATF_TRACE_INITIALIZER {NULL,NULL,0.0,NULL} - -typedef struct s_sg_platf_trace_connect_cbarg *sg_platf_trace_connect_cbarg_t; -typedef struct s_sg_platf_trace_connect_cbarg { - e_surf_trace_connect_kind_t kind; - const char *trace; - const char *element; -} s_sg_platf_trace_connect_cbarg_t; - -#define SG_PLATF_TRACE_CONNECT_INITIALIZER {SURF_TRACE_CONNECT_KIND_LATENCY,NULL,NULL} - -typedef struct s_sg_platf_process_cbarg *sg_platf_process_cbarg_t; -typedef struct s_sg_platf_process_cbarg { - const char **argv; - int argc; - xbt_dict_t properties; - const char *host; - const char *function; - double start_time; - double kill_time; - e_surf_process_on_failure_t on_failure; -} s_sg_platf_process_cbarg_t; - -#define SG_PLATF_PROCESS_INITIALIZER {NULL,0,NULL,NULL,NULL,-1.0,-1.0,SURF_PROCESS_ON_FAILURE_DIE} - -typedef struct s_sg_platf_AS_cbarg *sg_platf_AS_cbarg_t; -typedef struct s_sg_platf_AS_cbarg { - const char *id; - int routing; -} s_sg_platf_AS_cbarg_t; - -#define SG_PLATF_AS_INITIALIZER {NULL,0} - /* ***************************************** */ XBT_PUBLIC(void) sg_platf_begin(void); // Start a new platform diff --git a/src/include/simgrid/platf_interface.h b/src/include/simgrid/platf_interface.h index b544dc1795..951ba46fdb 100644 --- a/src/include/simgrid/platf_interface.h +++ b/src/include/simgrid/platf_interface.h @@ -9,9 +9,13 @@ #ifndef SG_PLATF_INTERFACE_H #define SG_PLATF_INTERFACE_H +#include + #include "simgrid/platf.h" /* public interface */ #include "xbt/RngStream.h" +#include + SG_BEGIN_DECL() /* Module management functions */ diff --git a/src/include/surf/surf.h b/src/include/surf/surf.h index a3f0074705..37d4b84ca0 100644 --- a/src/include/surf/surf.h +++ b/src/include/surf/surf.h @@ -20,6 +20,7 @@ #include "simgrid/platf_interface.h" #include "simgrid/datatypes.h" #include "simgrid/plugins.h" +#include "simgrid/forward.h" SG_BEGIN_DECL() /* Actions and models are highly connected structures... */ @@ -56,7 +57,6 @@ class Action; class ActionLmm; class StorageActionLmm; class As; -class RoutingEdge; class RoutingPlatf; #else typedef struct Model Model; @@ -74,7 +74,6 @@ typedef struct Action Action; typedef struct ActionLmm ActionLmm; typedef struct StorageActionLmm StorageActionLmm; typedef struct As As; -typedef struct RoutingEdge RoutingEdge; typedef struct RoutingPlatf RoutingPlatf; #endif @@ -95,6 +94,7 @@ typedef StorageModel *surf_storage_model_t; typedef xbt_dictelm_t surf_resource_t; typedef Resource *surf_cpp_resource_t; typedef Host *surf_host_t; +typedef Cpu *surf_cpu_t; /** @ingroup SURF_c_bindings * \brief Action structure @@ -107,7 +107,6 @@ typedef Host *surf_host_t; typedef Action *surf_action_t; typedef As *AS_t; -typedef RoutingEdge *routing_edge_t; typedef RoutingPlatf *routing_platf_t; typedef struct surf_file *surf_file_t; @@ -243,7 +242,7 @@ XBT_PUBLIC(int) surf_model_running_action_set_size(surf_model_t model); */ XBT_PUBLIC(surf_action_t) surf_host_model_execute_parallel_task(surf_host_model_t model, int host_nb, - sg_host_t *host_list, + sg_host_t *host_list, double *flops_amount, double *bytes_amount, double rate); diff --git a/tools/cmake/DefinePackages.cmake b/tools/cmake/DefinePackages.cmake index 03adb42164..f2585f4297 100644 --- a/tools/cmake/DefinePackages.cmake +++ b/tools/cmake/DefinePackages.cmake @@ -706,6 +706,7 @@ set(headers_to_install include/simgrid.h include/simgrid/datatypes.h include/simgrid/modelchecker.h + include/simgrid/forward.h include/simgrid/platf.h include/simgrid/platf_generator.h include/simgrid/plugins.h -- 2.20.1