1 /* Copyright (c) 2004-2007, 2009-2015. The SimGrid Team.
2 * All rights reserved. */
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. */
7 #ifndef SIMGRId_XBT_DYNAR_HPP
8 #define SIMGRId_XBT_DYNAR_HPP
10 #include <boost/range/iterator_range.hpp>
12 #include <xbt/asserts.h>
13 #include <xbt/dynar.h>
18 /** A C++ range from a a dynar */
20 using DynarRange = boost::iterator_range<T*>;
22 /** Create an iterator range representing a dynar
24 * C++ range loops for `xbt_dynar_t`:
26 * <code>for (auto& x : range<double>(some_dynar)) ++x;</code>
28 template<class T> inline
29 DynarRange<T> range(xbt_dynar_t dynar)
31 xbt_assert(dynar->elmsize == sizeof(T));
32 return DynarRange<T>((T*) dynar->data,
33 (T*) ((char*) dynar->data + dynar->used * dynar->elmsize));