Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
[mc] Remove the horrible MC_EACH_SIMIX_PROCESS() macro
[simgrid.git] / include / xbt / dynar.hpp
1 /* Copyright (c) 2004-2007, 2009-2015. The SimGrid Team.
2  * All rights reserved.                                                     */
3
4 /* This program is free software; you can redistribute it and/or modify it
5  * under the terms of the license (GNU LGPL) which comes with this package. */
6
7 #ifndef SIMGRId_XBT_DYNAR_HPP
8 #define SIMGRId_XBT_DYNAR_HPP
9
10 #include <boost/range/iterator_range.hpp>
11
12 #include <xbt/asserts.h>
13 #include <xbt/dynar.h>
14
15 namespace simgrid {
16 namespace xbt {
17
18 /** A C++ range from a a dynar */
19 template<class T>
20 using DynarRange = boost::iterator_range<T*>;
21
22 /** Create an iterator range representing a dynar
23  *
24  *  C++ range loops for `xbt_dynar_t`:
25  *
26  *  <code>for (auto& x : range<double>(some_dynar)) ++x;</code>
27  */
28 template<class T> inline
29 DynarRange<T> range(xbt_dynar_t dynar)
30 {
31   xbt_assert(dynar->elmsize == sizeof(T));
32   return DynarRange<T>((T*) dynar->data,
33     (T*) ((char*) dynar->data + dynar->used * dynar->elmsize));
34 }
35
36 }
37 }
38
39 #endif