/* 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. */
/* 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. */
+/**
+ * @brief Callback to dynamically change the resource's capacity
+ *
+ * Allows user to change resource's capacity depending on the number of concurrent activities
+ * running on the resource at a given instant
+ */
+using NonLinearResourceCb = std::function<double(double capacity, int n_activities)>;
XBT_PUBLIC void intrusive_ptr_add_ref(ActivityImpl* activity);
XBT_PUBLIC void intrusive_ptr_release(ActivityImpl* activity);
XBT_PUBLIC void intrusive_ptr_add_ref(ActivityImpl* activity);
XBT_PUBLIC void intrusive_ptr_release(ActivityImpl* activity);
+ class BarrierImpl;
+ using BarrierImplPtr = boost::intrusive_ptr<BarrierImpl>;
+ XBT_PUBLIC void intrusive_ptr_add_ref(BarrierImpl* cond);
+ XBT_PUBLIC void intrusive_ptr_release(BarrierImpl* cond);
+ class BarrierAcquisitionImpl;
+ using BarrierAcquisitionImplPtr = boost::intrusive_ptr<BarrierAcquisitionImpl>;
+
class ConditionVariableImpl;
using ConditionVariableImplPtr = boost::intrusive_ptr<ConditionVariableImpl>;
XBT_PUBLIC void intrusive_ptr_add_ref(ConditionVariableImpl* cond);
class ConditionVariableImpl;
using ConditionVariableImplPtr = boost::intrusive_ptr<ConditionVariableImpl>;
XBT_PUBLIC void intrusive_ptr_add_ref(ConditionVariableImpl* cond);
using IoImplPtr = boost::intrusive_ptr<IoImpl>;
class MutexImpl;
using MutexImplPtr = boost::intrusive_ptr<MutexImpl>;
using IoImplPtr = boost::intrusive_ptr<IoImpl>;
class MutexImpl;
using MutexImplPtr = boost::intrusive_ptr<MutexImpl>;
XBT_PUBLIC void intrusive_ptr_add_ref(MutexImpl* mutex);
XBT_PUBLIC void intrusive_ptr_release(MutexImpl* mutex);
XBT_PUBLIC void intrusive_ptr_add_ref(MutexImpl* mutex);
XBT_PUBLIC void intrusive_ptr_release(MutexImpl* mutex);
XBT_PUBLIC void intrusive_ptr_add_ref(SemaphoreImpl* sem);
XBT_PUBLIC void intrusive_ptr_release(SemaphoreImpl* sem);
class SleepImpl;
XBT_PUBLIC void intrusive_ptr_add_ref(SemaphoreImpl* sem);
XBT_PUBLIC void intrusive_ptr_release(SemaphoreImpl* sem);
class SleepImpl;
using smx_actor_t = simgrid::kernel::actor::ActorImpl*;
using smx_activity_t = simgrid::kernel::activity::ActivityImpl*;
using smx_cond_t = simgrid::kernel::activity::ConditionVariableImpl*;
using smx_mailbox_t = simgrid::kernel::activity::MailboxImpl*;
using smx_mutex_t = simgrid::kernel::activity::MutexImpl*;
using smx_sem_t = simgrid::kernel::activity::SemaphoreImpl*;
using smx_actor_t = simgrid::kernel::actor::ActorImpl*;
using smx_activity_t = simgrid::kernel::activity::ActivityImpl*;
using smx_cond_t = simgrid::kernel::activity::ConditionVariableImpl*;
using smx_mailbox_t = simgrid::kernel::activity::MailboxImpl*;
using smx_mutex_t = simgrid::kernel::activity::MutexImpl*;
using smx_sem_t = simgrid::kernel::activity::SemaphoreImpl*;
typedef struct s4u_Disk s4u_Disk;
typedef struct s4u_NetZone s4u_NetZone;
typedef struct s4u_VM s4u_VM;
typedef struct s4u_Disk s4u_Disk;
typedef struct s4u_NetZone s4u_NetZone;
typedef struct s4u_VM s4u_VM;
/** Pointer to a SimGrid barrier object */
typedef s4u_Barrier* sg_bar_t;
/** Constant pointer to a SimGrid barrier object */
/** Pointer to a SimGrid barrier object */
typedef s4u_Barrier* sg_bar_t;
/** Constant pointer to a SimGrid barrier object */
typedef s4u_Exec* sg_exec_t;
typedef const s4u_Exec* const_sg_exec_t;
typedef s4u_ConditionVariable* sg_cond_t;
typedef s4u_Exec* sg_exec_t;
typedef const s4u_Exec* const_sg_exec_t;
typedef s4u_ConditionVariable* sg_cond_t;
typedef const s4u_Link* const_sg_link_t;
typedef s4u_Disk* sg_disk_t;
typedef const s4u_Disk* const_sg_disk_t;
typedef const s4u_Link* const_sg_link_t;
typedef s4u_Disk* sg_disk_t;
typedef const s4u_Disk* const_sg_disk_t;