/* 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/jedule/jedule_events.hpp"
-
#include "simgrid/jedule/jedule.hpp"
-#include "simgrid/jedule/jedule_platform.hpp"
#include "simgrid/s4u/NetZone.hpp"
#include "xbt/asserts.h"
-/* Copyright (c) 2010-2016. The SimGrid Team.
- * All rights reserved. */
+/* Copyright (c) 2010-2017. 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. */
#include "simgrid/jedule/jedule.hpp"
-#include "simgrid/jedule/jedule_platform.hpp"
#include "simgrid/s4u/NetZone.hpp"
#include "xbt/asserts.h"
-#include "xbt/dynar.h"
#include <algorithm>
#if SIMGRID_HAVE_JEDULE
/* 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/jedule/jedule_sd_binding.h"
-
#include "simgrid/jedule/jedule.hpp"
#include "src/simdag/simdag_private.hpp"
#include "src/mc/mc_state.h"
#include "src/mc/remote/Client.hpp"
+#include "src/smpi/smpi_request.hpp"
+
using simgrid::mc::remote;
XBT_LOG_NEW_DEFAULT_SUBCATEGORY(mc_comm_determinism, mc,
#include "src/mc/mc_replay.h"
#include "simgrid/sg_config.h"
+#include "src/smpi/smpi_process.hpp"
+
#include "src/kernel/activity/SynchroExec.hpp"
#include "src/kernel/activity/SynchroComm.hpp"
#include "src/kernel/activity/SynchroSleep.hpp"
-/* Copyright (c) 2013-2017. The SimGrid Team.
- * All rights reserved. */
+/* Copyright (c) 2013-2017. 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. */
#include "../colls_private.h"
+#include "src/smpi/smpi_status.hpp"
namespace simgrid{
namespace smpi{
-
int
Coll_allgather_rdb::allgather(void *sbuf, int send_count,
MPI_Datatype send_type, void *rbuf,
-/* Copyright (c) 2013-2017. The SimGrid Team.
- * All rights reserved. */
+/* Copyright (c) 2013-2017. 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. */
- /* Short or medium size message and power-of-two no. of processes. Use
- * recursive doubling algorithm */
+/* Short or medium size message and power-of-two no. of processes. Use
+ * recursive doubling algorithm */
+
#include "../colls_private.h"
+#include "src/smpi/smpi_status.hpp"
namespace simgrid{
namespace smpi{
} \
#include "../colls_private.h"
+
namespace simgrid{
namespace smpi{
int
* under the terms of the license (GNU LGPL) which comes with this package. */
#include "../colls_private.h"
+#include "src/smpi/smpi_win.hpp"
/*****************************************************************************
* under the terms of the license (GNU LGPL) which comes with this package. */
#include "../colls_private.h"
+#include "src/smpi/smpi_status.hpp"
/*****************************************************************************
-/* Copyright (c) 2013-2017. The SimGrid Team.
- * All rights reserved. */
+/* Copyright (c) 2013-2017. 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. */
#include "../colls_private.h"
+#include "src/smpi/smpi_status.hpp"
/*****************************************************************************
+/* Copyright (c) 2011-2017. 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. */
+
#include "../colls_private.h"
+#include "src/smpi/smpi_status.hpp"
+
namespace simgrid{
namespace smpi{
#include <math.h>
#include "smpi/mpi.h"
-#include "src/smpi/private.h"
-#include "xbt/ex.h"
-#include "xbt.h"
-#include "../smpi_coll.hpp"
+#include "src/smpi/smpi_coll.hpp"
+#include "src/smpi/smpi_comm.hpp"
+#include "src/smpi/smpi_datatype.hpp"
+#include "src/smpi/smpi_op.hpp"
+#include "src/smpi/smpi_request.hpp"
XBT_LOG_EXTERNAL_DEFAULT_CATEGORY(smpi_colls);
#include <exception>
#include "colls_private.h"
+#include "src/smpi/smpi_process.hpp"
+
//attempt to do a quick autotuning version of the collective,
* under the terms of the license (GNU LGPL) which comes with this package. */
#include "colls_private.h"
+#include "src/smpi/smpi_process.hpp"
namespace simgrid{
namespace smpi{
#ifndef SMPI_PRIVATE_H
#define SMPI_PRIVATE_H
-#include "simgrid/simix.h"
#include "smpi/smpi.h"
+#include "simgrid/msg.h" // msg_bar_t
#include "src/instr/instr_private.h"
-#include "src/internal_config.h"
-#include "xbt.h"
-#include "xbt/base.h"
-#include "xbt/synchro.h"
-#include "xbt/xbt_os_time.h"
-#include "src/smpi/smpi_process.hpp"
-#include "src/smpi/smpi_f2c.hpp"
-#include "src/smpi/smpi_keyvals.hpp"
-#include "src/smpi/smpi_group.hpp"
-#include "src/smpi/smpi_topo.hpp"
-#include "src/smpi/smpi_coll.hpp"
-#include "src/smpi/smpi_comm.hpp"
-#include "src/smpi/smpi_info.hpp"
-#include "src/smpi/smpi_op.hpp"
-#include "src/smpi/smpi_datatype.hpp"
-#include "src/smpi/smpi_datatype_derived.hpp"
-#include "src/smpi/smpi_request.hpp"
-#include "src/smpi/smpi_status.hpp"
-#include "src/smpi/smpi_win.hpp"
-SG_BEGIN_DECL()
+SG_BEGIN_DECL()
#define PERSISTENT 0x1
#define NON_PERSISTENT 0x2
#include "src/instr/instr_smpi.h"
#include <unordered_map>
#include <vector>
+#include "src/internal_config.h"
/**
* Get the address of the beginning of the memory page where addr is located.
/* 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 <cstring>
-
-#include <unordered_map>
-#include <utility>
-
#include "src/internal_config.h"
#include "private.h"
#include "private.hpp"
-#include <xbt/ex.hpp>
-#include "xbt/dict.h"
-#include "xbt/sysdep.h"
-#include "xbt/ex.h"
-#include "surf/surf.h"
-#include "simgrid/sg_config.h"
#include "simgrid/modelchecker.h"
#include "src/mc/mc_replay.h"
+#include "src/smpi/smpi_process.hpp"
+#include "src/smpi/smpi_comm.hpp"
-#include <sys/types.h>
#ifndef WIN32
#include <sys/mman.h>
#endif
#include <math.h> // sqrt
-#include <stdio.h>
#if HAVE_PAPI
#include <papi.h>
/* 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 <stdio.h>
-#include <string.h>
-#include <assert.h>
-
-#include "private.h"
-#include "simgrid/sg_config.h"
+#include "src/smpi/smpi_coll.hpp"
+#include "src/smpi/smpi_comm.hpp"
+#include "src/smpi/smpi_datatype.hpp"
+#include "src/smpi/smpi_op.hpp"
+#include "src/smpi/smpi_request.hpp"
XBT_LOG_NEW_DEFAULT_SUBCATEGORY(smpi_coll, smpi, "Logging specific to SMPI (coll)");
#include "simgrid/s4u/Host.hpp"
-#include "private.h"
#include "src/simix/smx_private.h"
+#include "src/smpi/smpi_comm.hpp"
+#include "src/smpi/smpi_coll.hpp"
+#include "src/smpi/smpi_datatype.hpp"
+#include "src/smpi/smpi_process.hpp"
+#include "src/smpi/smpi_request.hpp"
+#include "src/smpi/smpi_status.hpp"
+#include "src/smpi/smpi_win.hpp"
XBT_LOG_NEW_DEFAULT_SUBCATEGORY(smpi_comm, smpi, "Logging specific to SMPI (comm)");
-/* Copyright (c) 2010-2017. The SimGrid Team.
- * All rights reserved. */
+/* Copyright (c) 2010-2017. 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. */
#include "private.h"
#include <list>
+#include "src/smpi/smpi_keyvals.hpp"
+#include "src/smpi/smpi_group.hpp"
+#include "src/smpi/smpi_topo.hpp"
namespace simgrid{
namespace smpi{
-/* smpi_datatype.cpp -- MPI primitives to handle datatypes */
-/* Copyright (c) 2009-2017. The SimGrid Team.
- * All rights reserved. */
+/* smpi_datatype.cpp -- MPI primitives to handle datatypes */
+/* Copyright (c) 2009-2017. 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. */
-#include "mc/mc.h"
-#include "private.h"
#include "simgrid/modelchecker.h"
-#include <limits.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <string>
-#include <unordered_map>
-#include <xbt/ex.hpp>
+#include "src/smpi/smpi_datatype_derived.hpp"
+#include "src/smpi/smpi_op.hpp"
+#include "src/smpi/smpi_process.hpp"
XBT_LOG_NEW_DEFAULT_SUBCATEGORY(smpi_datatype, smpi, "Logging specific to SMPI (datatype)");
sizeof(type), /* size */ \
0, /* lb */ \
sizeof(type), /* ub = lb + size */ \
- DT_FLAG_BASIC /* flags */ \
+ DT_FLAG_BASIC /* flags */ \
); \
const MPI_Datatype name = &mpi_##name;
-/* Copyright (c) 2009-2010, 2012-2017. The SimGrid Team.
- * All rights reserved. */
+/* Copyright (c) 2009-2017. 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 SMPI_DATATYPE_HPP
#define SMPI_DATATYPE_HPP
-#include <xbt/base.h>
-
-#include "private.h"
-
+#include "src/smpi/smpi_f2c.hpp"
+#include "src/smpi/smpi_keyvals.hpp"
#define DT_FLAG_DESTROYED 0x0001 /**< user destroyed but some other layers still have a reference */
#define DT_FLAG_COMMITED 0x0002 /**< ready to be used for a send/recv operation */
-/* smpi_datatype.cpp -- MPI primitives to handle datatypes */
-/* Copyright (c) 2009-2017. The SimGrid Team.
- * All rights reserved. */
+/* smpi_datatype.cpp -- MPI primitives to handle datatypes */
+/* Copyright (c) 2009-2017. 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. */
-#include "mc/mc.h"
-#include "private.h"
-
-#include <limits.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <string>
+#include "src/smpi/smpi_datatype_derived.hpp"
+#include "src/smpi/smpi_op.hpp"
XBT_LOG_EXTERNAL_CATEGORY(smpi_datatype);
#include <xbt/base.h>
#include "private.h"
+#include "src/smpi/smpi_datatype.hpp"
namespace simgrid{
namespace smpi{
-class Type_Contiguous: public Datatype{
+class Type_Contiguous: public Datatype {
private:
int block_count_;
MPI_Datatype old_type_;
/* 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 "private.h"
#include "simgrid/msg.h" /* barrier */
#include "src/smpi/SmpiHost.hpp"
-#include "xbt/log.h"
+#include "src/smpi/smpi_comm.hpp"
namespace simgrid {
namespace smpi {
-/* Copyright (c) 2007-2017. The SimGrid Team.
- * All rights reserved. */
+/* Copyright (c) 2007-2017. 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. */
-#include "private.h"
-#include <vector>
+#include "src/smpi/smpi_f2c.hpp"
+#include "src/smpi/smpi_process.hpp"
+#include <cstdio>
namespace simgrid{
namespace smpi{
};
char* F2C::get_key(char* key, int id) {
- snprintf(key, KEY_SIZE, "%x",id);
+ std::snprintf(key, KEY_SIZE, "%x",id);
return key;
}
char* F2C::get_key_id(char* key, int id) {
- snprintf(key, KEY_SIZE, "%x_%d",id, smpi_process()->index());
+ std::snprintf(key, KEY_SIZE, "%x_%d",id, smpi_process()->index());
return key;
}
#ifndef SMPI_F2C_HPP_INCLUDED
#define SMPI_F2C_HPP_INCLUDED
-#include "private.h"
-
+#include "xbt/dict.h"
#define KEY_SIZE (sizeof(int) * 2 + 1)
-/* Copyright (c) 2010-2017. The SimGrid Team.
- * All rights reserved. */
+/* Copyright (c) 2010-2017. 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. */
-#include <limits.h>
-#include <stdio.h>
-#include "private.h"
-#include "xbt.h"
+#include "src/smpi/smpi_datatype.hpp"
+#include "src/smpi/smpi_op.hpp"
+#include "src/smpi/smpi_process.hpp"
+#include "src/smpi/smpi_request.hpp"
+#include "src/smpi/smpi_win.hpp"
static int running_processes = 0;
#include <sys/wait.h>
#include "mc/mc.h"
-#include "private.h"
-#include "private.hpp"
#include "simgrid/s4u/Mailbox.hpp"
#include "smpi/smpi_shared_malloc.hpp"
#include "simgrid/sg_config.h"
#include "surf/surf.h"
#include "xbt/replay.hpp"
#include <xbt/config.hpp>
+#include "src/smpi/smpi_process.hpp"
+#include "src/smpi/smpi_coll.hpp"
+#include "src/smpi/smpi_info.hpp"
#include <float.h> /* DBL_MAX */
#include <fstream>
-/* Copyright (c) 2010, 2013-2017. The SimGrid Team.
- * All rights reserved. */
+/* Copyright (c) 2010-2017. 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. */
-#include "private.h"
+#include "src/smpi/smpi_comm.hpp"
+#include "src/smpi/smpi_group.hpp"
XBT_LOG_NEW_DEFAULT_SUBCATEGORY(smpi_group, smpi, "Logging specific to SMPI (group)");
#define SMPI_GROUP_HPP_INCLUDED
#include "private.h"
+#include "src/smpi/smpi_f2c.hpp"
namespace simgrid{
namespace smpi{
/* 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 "private.h"
-#include <vector>
-#include <xbt/ex.hpp>
+#include "src/smpi/smpi_info.hpp"
namespace simgrid{
namespace smpi{
#include <xbt/base.h>
#include "private.h"
+#include "src/smpi/smpi_comm.hpp"
namespace simgrid{
namespace smpi{
/* 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 "private.h"
-#include <unordered_map>
-#include <xbt/ex.hpp>
+//#include "private.h"
+#include "src/smpi/smpi_keyvals.hpp"
namespace simgrid{
namespace smpi{
#ifndef SMPI_KEYVALS_HPP_INCLUDED
#define SMPI_KEYVALS_HPP_INCLUDED
-#include "private.h"
#include <unordered_map>
#include <xbt/ex.hpp>
+#include "smpi/smpi.h"
typedef struct smpi_delete_fn{
MPI_Comm_delete_attr_function *comm_delete_fn;
-/* Copyright (c) 2015. The SimGrid Team.
- * All rights reserved. */
+/* Copyright (c) 2015-2017. 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. */
#include <cstdint>
#include <climits>
+#include <cstring>
#include <vector>
#include <sys/mman.h>
#include <unistd.h>
-#include "../xbt/memory_map.hpp"
+#include "src/xbt/memory_map.hpp"
#include "private.h"
#include "private.hpp"
/* 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 "mc/mc.h"
-#include "private.h"
+#include "src/smpi/smpi_datatype.hpp"
+#include "src/smpi/smpi_op.hpp"
+#include "src/smpi/smpi_process.hpp"
XBT_LOG_NEW_DEFAULT_SUBCATEGORY(smpi_op, smpi, "Logging specific to SMPI (op)");
#ifndef SMPI_OP_HPP
#define SMPI_OP_HPP
-#include <xbt/base.h>
-
#include "private.h"
+#include "src/smpi/smpi_info.hpp"
namespace simgrid{
namespace smpi{
#include "simgrid/s4u/Engine.hpp"
#include "simgrid/s4u/Host.hpp"
-
-#include "private.h"
+#include "src/smpi/smpi_comm.hpp"
+#include "src/smpi/smpi_coll.hpp"
+#include "src/smpi/smpi_datatype_derived.hpp"
+#include "src/smpi/smpi_op.hpp"
+#include "src/smpi/smpi_process.hpp"
+#include "src/smpi/smpi_request.hpp"
+#include "src/smpi/smpi_status.hpp"
+#include "src/smpi/smpi_win.hpp"
XBT_LOG_NEW_DEFAULT_SUBCATEGORY(smpi_pmpi, smpi, "Logging specific to SMPI (pmpi)");
+/* Copyright (c) 2009-2017. 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. */
+
#include "mc/mc.h"
-#include "private.h"
-#include "simgrid/s4u/Mailbox.hpp"
-#include "src/kernel/activity/SynchroComm.hpp"
-#include "src/mc/mc_record.h"
#include "src/mc/mc_replay.h"
#include "src/msg/msg_private.h"
#include "src/simix/smx_private.h"
-#include "surf/surf.h"
-#include "xbt/replay.hpp"
+#include "src/smpi/smpi_process.hpp"
+#include "src/smpi/smpi_group.hpp"
+#include "src/smpi/smpi_comm.hpp"
XBT_LOG_NEW_DEFAULT_SUBCATEGORY(smpi_process, smpi, "Logging specific to SMPI (kernel)");
#include "src/instr/instr_smpi.h"
#include "private.h"
#include "simgrid/s4u/Mailbox.hpp"
+#include "xbt/synchro.h"
namespace simgrid{
namespace smpi{
/* 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 "private.h"
+#include "src/smpi/smpi_coll.hpp"
+#include "src/smpi/smpi_comm.hpp"
+#include "src/smpi/smpi_datatype.hpp"
+#include "src/smpi/smpi_group.hpp"
+#include "src/smpi/smpi_process.hpp"
+#include "src/smpi/smpi_request.hpp"
#include "xbt/replay.hpp"
+
#include <unordered_map>
#include <vector>
/* 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 "private.h"
#include "mc/mc.h"
#include "src/mc/mc_replay.h"
#include "src/smpi/SmpiHost.hpp"
#include "src/kernel/activity/SynchroComm.hpp"
+#include "src/smpi/smpi_comm.hpp"
+#include "src/smpi/smpi_datatype.hpp"
+#include "src/smpi/smpi_op.hpp"
+#include "src/smpi/smpi_process.hpp"
+#include "src/smpi/smpi_request.hpp"
#include <algorithm>
#ifndef SMPI_REQUEST_HPP_INCLUDED
#define SMPI_REQUEST_HPP_INCLUDED
-#include "private.h"
+#include "src/smpi/smpi_f2c.hpp"
namespace simgrid{
namespace smpi{
-class Request : public F2C{
+class Request : public F2C {
private :
void *buf_;
/* in the case of non-contiguous memory the user address should be keep
* ----
*/
#include <map>
+#include <cstring>
#include "private.h"
#include "private.hpp"
#include "smpi/smpi_shared_malloc.hpp"
#include "xbt/dict.h"
+#include "xbt/ex.hpp"
#include <errno.h>
#include <sys/types.h>
-/* Copyright (c) 2011-2017. The SimGrid Team.
- * All rights reserved. */
+/* Copyright (c) 2011-2017. 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. */
-/* Copyright (c) 2007-2017. The SimGrid Team.
- * All rights reserved. */
+/* Copyright (c) 2007-2017. 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. */
#include "private.h"
#include "src/simix/smx_private.h"
+#include "src/smpi/smpi_datatype.hpp"
+#include "src/smpi/smpi_status.hpp"
namespace simgrid{
namespace smpi{
#ifndef SMPI_STATUS_HPP
#define SMPI_STATUS_HPP
-#include "private.h"
+#include "smpi/smpi.h"
namespace simgrid{
namespace smpi{
#include "private.h"
#include <vector>
#include <math.h>
+#include "src/smpi/smpi_comm.hpp"
+#include "src/smpi/smpi_topo.hpp"
/* static functions */
static int assignnodes(int ndim, int nfactor, int *pfacts,int **pdims);
-/* Copyright (c) 2010-2017. The SimGrid Team.
- * All rights reserved. */
+/* Copyright (c) 2010-2017. 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 SMPI_TOPO_HPP_INCLUDED
#define SMPI_TOPO_HPP_INCLUDED
-#include "private.h"
+#include "src/smpi/smpi_comm.hpp"
+#include "src/smpi/smpi_status.hpp"
typedef enum MPIR_Topo_type {
MPI_GRAPH=1,
-/* Copyright (c) 2007-2017. The SimGrid Team.
- * All rights reserved. */
+/* Copyright (c) 2007-2017. 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. */
-#include "private.h"
-#include <vector>
+#include "src/smpi/smpi_coll.hpp"
+#include "src/smpi/smpi_datatype.hpp"
+#include "src/smpi/smpi_info.hpp"
+#include "src/smpi/smpi_keyvals.hpp"
+#include "src/smpi/smpi_process.hpp"
+#include "src/smpi/smpi_request.hpp"
+#include "src/smpi/smpi_win.hpp"
XBT_LOG_NEW_DEFAULT_SUBCATEGORY(smpi_rma, smpi, "Logging specific to SMPI (RMA operations)");
#ifndef SMPI_WIN_HPP_INCLUDED
#define SMPI_WIN_HPP_INCLUDED
-#include "private.h"
+#include "src/smpi/smpi_keyvals.hpp"
+#include "xbt/synchro.h"
+
#include <vector>
#include <list>