Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Merge pull request #113 from adfaure/master
authorMartin Quinson <martin.quinson@ens-rennes.fr>
Wed, 7 Sep 2016 18:58:04 +0000 (20:58 +0200)
committerGitHub <noreply@github.com>
Wed, 7 Sep 2016 18:58:04 +0000 (20:58 +0200)
[s4u]fix s4u::Comm::wait_any_for bugs when the timeout is below the c…

16 files changed:
examples/simdag/CMakeLists.txt
examples/simdag/scheduling/expected_output.jed [new file with mode: 0644]
examples/simdag/scheduling/sd_scheduling.tesh
include/simgrid/jedule/jedule_events.h [deleted file]
include/simgrid/jedule/jedule_events.hpp [new file with mode: 0644]
include/simgrid/jedule/jedule_output.hpp [moved from include/simgrid/jedule/jedule_output.h with 87% similarity]
include/simgrid/jedule/jedule_platform.hpp [moved from include/simgrid/jedule/jedule_platform.h with 61% similarity]
src/instr/jedule/jedule_events.cpp
src/instr/jedule/jedule_output.cpp
src/instr/jedule/jedule_platform.cpp
src/instr/jedule/jedule_sd_binding.cpp
src/surf/surf_interface.cpp
tools/cmake/DefinePackages.cmake
tools/cmake/Tests.cmake
tools/tesh/set-output-sort.tesh
tools/tesh/tesh.py

index a8f6279..26a8a1b 100644 (file)
@@ -37,7 +37,8 @@ set(txt_files    ${txt_files}     ${CMAKE_CURRENT_SOURCE_DIR}/dag-dotload/dag_wi
                                   ${CMAKE_CURRENT_SOURCE_DIR}/dag-dotload/dag.dot
                                   ${CMAKE_CURRENT_SOURCE_DIR}/ptg-dotload/ptg.dot
                                   ${CMAKE_CURRENT_SOURCE_DIR}/schedule-dotload/dag_with_bad_schedule.dot
-                                  ${CMAKE_CURRENT_SOURCE_DIR}/schedule-dotload/dag_with_good_schedule.dot  PARENT_SCOPE)
+                                  ${CMAKE_CURRENT_SOURCE_DIR}/schedule-dotload/dag_with_good_schedule.dot
+                                  ${CMAKE_CURRENT_SOURCE_DIR}/scheduling/expected_output.jed               PARENT_SCOPE)
 
 foreach(x availability daxload fail typed_tasks properties throttling scheduling test)
   ADD_TESH(simdag-${x} --setenv srcdir=${CMAKE_HOME_DIRECTORY}/examples/simdag --cd ${CMAKE_BINARY_DIR}/examples/simdag ${CMAKE_HOME_DIRECTORY}/examples/simdag/${x}/sd_${x}.tesh)
diff --git a/examples/simdag/scheduling/expected_output.jed b/examples/simdag/scheduling/expected_output.jed
new file mode 100644 (file)
index 0000000..0228c80
--- /dev/null
@@ -0,0 +1,1252 @@
+<jedule>
+  <platform>
+    <res name="AS0">
+      <rset id="0" nb="7" names="Host 26|Host 27|Host 28|Host 29|Host 30|Host 31|Host 32" />
+    </res>
+  </platform>
+  <events>
+    <event>
+      <prop key="name" value="root" />
+      <prop key="start" value="0" />
+      <prop key="end" value="0" />
+      <prop key="type" value="SD" />
+      <res_util>
+        <select resources="0.[0-0]" />
+      </res_util>
+    </event>
+    <event>
+      <prop key="name" value="root_region.hdr_ID00002@mProjectPP" />
+      <prop key="start" value="0" />
+      <prop key="end" value="0.000104864" />
+      <prop key="type" value="SD" />
+      <res_util>
+        <select resources="0.[0-1]" />
+      </res_util>
+    </event>
+    <event>
+      <prop key="name" value="root_region.hdr_ID00000@mProjectPP" />
+      <prop key="start" value="0.000104864" />
+      <prop key="end" value="0.000120474" />
+      <prop key="type" value="SD" />
+      <res_util>
+        <select resources="0.[0-0]" />
+      </res_util>
+    </event>
+    <event>
+      <prop key="name" value="root_region.hdr_ID00003@mProjectPP" />
+      <prop key="start" value="0.000120474" />
+      <prop key="end" value="0.000325338" />
+      <prop key="type" value="SD" />
+      <res_util>
+        <select resources="0.[0-0]" />
+        <select resources="0.[4-4]" />
+      </res_util>
+    </event>
+    <event>
+      <prop key="name" value="root_region.hdr_ID00004@mProjectPP" />
+      <prop key="start" value="0.000325338" />
+      <prop key="end" value="0.000432634" />
+      <prop key="type" value="SD" />
+      <res_util>
+        <select resources="0.[0-1]" />
+      </res_util>
+    </event>
+    <event>
+      <prop key="name" value="root_region.hdr_ID00001@mProjectPP" />
+      <prop key="start" value="0.000432634" />
+      <prop key="end" value="0.00063993" />
+      <prop key="type" value="SD" />
+      <res_util>
+        <select resources="0.[0-0]" />
+        <select resources="0.[6-6]" />
+      </res_util>
+    </event>
+    <event>
+      <prop key="name" value="root_2mass-atlas-ID00000s-jID00000.fits_ID00000@mProjectPP" />
+      <prop key="start" value="0.000104864" />
+      <prop key="end" value="0.00859794" />
+      <prop key="type" value="SD" />
+      <res_util>
+        <select resources="0.[0-0]" />
+      </res_util>
+    </event>
+    <event>
+      <prop key="name" value="root_2mass-atlas-ID00002s-jID00002.fits_ID00002@mProjectPP" />
+      <prop key="start" value="0" />
+      <prop key="end" value="0.0673352" />
+      <prop key="type" value="SD" />
+      <res_util>
+        <select resources="0.[0-1]" />
+      </res_util>
+    </event>
+    <event>
+      <prop key="name" value="root_2mass-atlas-ID00003s-jID00003.fits_ID00003@mProjectPP" />
+      <prop key="start" value="0.000120474" />
+      <prop key="end" value="0.0675689" />
+      <prop key="type" value="SD" />
+      <res_util>
+        <select resources="0.[0-0]" />
+        <select resources="0.[4-4]" />
+      </res_util>
+    </event>
+    <event>
+      <prop key="name" value="root_2mass-atlas-ID00004s-jID00004.fits_ID00004@mProjectPP" />
+      <prop key="start" value="0.000325338" />
+      <prop key="end" value="0.0676581" />
+      <prop key="type" value="SD" />
+      <res_util>
+        <select resources="0.[0-1]" />
+      </res_util>
+    </event>
+    <event>
+      <prop key="name" value="root_2mass-atlas-ID00001s-jID00001.fits_ID00001@mProjectPP" />
+      <prop key="start" value="0.000432634" />
+      <prop key="end" value="0.0678786" />
+      <prop key="type" value="SD" />
+      <res_util>
+        <select resources="0.[0-0]" />
+        <select resources="0.[6-6]" />
+      </res_util>
+    </event>
+    <event>
+      <prop key="name" value="ID00002@mProjectPP" />
+      <prop key="start" value="0.0673352" />
+      <prop key="end" value="14.5763" />
+      <prop key="type" value="SD" />
+      <res_util>
+        <select resources="0.[1-1]" />
+      </res_util>
+    </event>
+    <event>
+      <prop key="name" value="root_region.hdr_ID00010@mDiffFit" />
+      <prop key="start" value="14.5763" />
+      <prop key="end" value="14.5763" />
+      <prop key="type" value="SD" />
+      <res_util>
+        <select resources="0.[0-0]" />
+      </res_util>
+    </event>
+    <event>
+      <prop key="name" value="ID00002@mProjectPP_p2mass-atlas-ID00002s-jID00002_area.fits_ID00010@mDiffFit" />
+      <prop key="start" value="14.5763" />
+      <prop key="end" value="14.6429" />
+      <prop key="type" value="SD" />
+      <res_util>
+        <select resources="0.[0-1]" />
+      </res_util>
+    </event>
+    <event>
+      <prop key="name" value="ID00002@mProjectPP_p2mass-atlas-ID00002s-jID00002.fits_ID00010@mDiffFit" />
+      <prop key="start" value="14.5763" />
+      <prop key="end" value="14.6429" />
+      <prop key="type" value="SD" />
+      <res_util>
+        <select resources="0.[0-1]" />
+      </res_util>
+    </event>
+    <event>
+      <prop key="name" value="ID00000@mProjectPP" />
+      <prop key="start" value="0.00859794" />
+      <prop key="end" value="17.0497" />
+      <prop key="type" value="SD" />
+      <res_util>
+        <select resources="0.[0-0]" />
+      </res_util>
+    </event>
+    <event>
+      <prop key="name" value="root_region.hdr_ID00008@mDiffFit" />
+      <prop key="start" value="17.0497" />
+      <prop key="end" value="17.0498" />
+      <prop key="type" value="SD" />
+      <res_util>
+        <select resources="0.[0-1]" />
+      </res_util>
+    </event>
+    <event>
+      <prop key="name" value="ID00002@mProjectPP_p2mass-atlas-ID00002s-jID00002_area.fits_ID00008@mDiffFit" />
+      <prop key="start" value="17.0497" />
+      <prop key="end" value="17.0581" />
+      <prop key="type" value="SD" />
+      <res_util>
+        <select resources="0.[1-1]" />
+      </res_util>
+    </event>
+    <event>
+      <prop key="name" value="ID00002@mProjectPP_p2mass-atlas-ID00002s-jID00002.fits_ID00008@mDiffFit" />
+      <prop key="start" value="17.0497" />
+      <prop key="end" value="17.0581" />
+      <prop key="type" value="SD" />
+      <res_util>
+        <select resources="0.[1-1]" />
+      </res_util>
+    </event>
+    <event>
+      <prop key="name" value="ID00000@mProjectPP_p2mass-atlas-ID00000s-jID00000_area.fits_ID00008@mDiffFit" />
+      <prop key="start" value="17.0497" />
+      <prop key="end" value="17.1165" />
+      <prop key="type" value="SD" />
+      <res_util>
+        <select resources="0.[0-1]" />
+      </res_util>
+    </event>
+    <event>
+      <prop key="name" value="ID00000@mProjectPP_p2mass-atlas-ID00000s-jID00000.fits_ID00008@mDiffFit" />
+      <prop key="start" value="17.0497" />
+      <prop key="end" value="17.1165" />
+      <prop key="type" value="SD" />
+      <res_util>
+        <select resources="0.[0-1]" />
+      </res_util>
+    </event>
+    <event>
+      <prop key="name" value="ID00003@mProjectPP" />
+      <prop key="start" value="0.0675689" />
+      <prop key="end" value="23.0827" />
+      <prop key="type" value="SD" />
+      <res_util>
+        <select resources="0.[4-4]" />
+      </res_util>
+    </event>
+    <event>
+      <prop key="name" value="ID00004@mProjectPP" />
+      <prop key="start" value="14.5763" />
+      <prop key="end" value="29.5414" />
+      <prop key="type" value="SD" />
+      <res_util>
+        <select resources="0.[1-1]" />
+      </res_util>
+    </event>
+    <event>
+      <prop key="name" value="root_region.hdr_ID00013@mDiffFit" />
+      <prop key="start" value="29.5414" />
+      <prop key="end" value="29.5414" />
+      <prop key="type" value="SD" />
+      <res_util>
+        <select resources="0.[0-0]" />
+      </res_util>
+    </event>
+    <event>
+      <prop key="name" value="ID00004@mProjectPP_p2mass-atlas-ID00004s-jID00004_area.fits_ID00013@mDiffFit" />
+      <prop key="start" value="29.5414" />
+      <prop key="end" value="29.608" />
+      <prop key="type" value="SD" />
+      <res_util>
+        <select resources="0.[0-1]" />
+      </res_util>
+    </event>
+    <event>
+      <prop key="name" value="ID00004@mProjectPP_p2mass-atlas-ID00004s-jID00004.fits_ID00013@mDiffFit" />
+      <prop key="start" value="29.5414" />
+      <prop key="end" value="29.608" />
+      <prop key="type" value="SD" />
+      <res_util>
+        <select resources="0.[0-1]" />
+      </res_util>
+    </event>
+    <event>
+      <prop key="name" value="ID00003@mProjectPP_p2mass-atlas-ID00003s-jID00003_area.fits_ID00013@mDiffFit" />
+      <prop key="start" value="29.5414" />
+      <prop key="end" value="29.6084" />
+      <prop key="type" value="SD" />
+      <res_util>
+        <select resources="0.[0-0]" />
+        <select resources="0.[4-4]" />
+      </res_util>
+    </event>
+    <event>
+      <prop key="name" value="ID00003@mProjectPP_p2mass-atlas-ID00003s-jID00003.fits_ID00013@mDiffFit" />
+      <prop key="start" value="29.5414" />
+      <prop key="end" value="29.6084" />
+      <prop key="type" value="SD" />
+      <res_util>
+        <select resources="0.[0-0]" />
+        <select resources="0.[4-4]" />
+      </res_util>
+    </event>
+    <event>
+      <prop key="name" value="ID00010@mDiffFit" />
+      <prop key="start" value="17.0497" />
+      <prop key="end" value="30.4255" />
+      <prop key="type" value="SD" />
+      <res_util>
+        <select resources="0.[0-0]" />
+      </res_util>
+    </event>
+    <event>
+      <prop key="name" value="ID00001@mProjectPP" />
+      <prop key="start" value="0.0678786" />
+      <prop key="end" value="32.6207" />
+      <prop key="type" value="SD" />
+      <res_util>
+        <select resources="0.[6-6]" />
+      </res_util>
+    </event>
+    <event>
+      <prop key="name" value="root_region.hdr_ID00009@mDiffFit" />
+      <prop key="start" value="32.6207" />
+      <prop key="end" value="32.6209" />
+      <prop key="type" value="SD" />
+      <res_util>
+        <select resources="0.[0-0]" />
+        <select resources="0.[4-4]" />
+      </res_util>
+    </event>
+    <event>
+      <prop key="name" value="root_region.hdr_ID00011@mDiffFit" />
+      <prop key="start" value="32.6209" />
+      <prop key="end" value="32.621" />
+      <prop key="type" value="SD" />
+      <res_util>
+        <select resources="0.[0-1]" />
+      </res_util>
+    </event>
+    <event>
+      <prop key="name" value="root_region.hdr_ID00005@mDiffFit" />
+      <prop key="start" value="32.621" />
+      <prop key="end" value="32.621" />
+      <prop key="type" value="SD" />
+      <res_util>
+        <select resources="0.[0-0]" />
+      </res_util>
+    </event>
+    <event>
+      <prop key="name" value="root_region.hdr_ID00006@mDiffFit" />
+      <prop key="start" value="32.621" />
+      <prop key="end" value="32.6212" />
+      <prop key="type" value="SD" />
+      <res_util>
+        <select resources="0.[0-0]" />
+        <select resources="0.[6-6]" />
+      </res_util>
+    </event>
+    <event>
+      <prop key="name" value="root_region.hdr_ID00012@mDiffFit" />
+      <prop key="start" value="32.6212" />
+      <prop key="end" value="32.6213" />
+      <prop key="type" value="SD" />
+      <res_util>
+        <select resources="0.[0-0]" />
+        <select resources="0.[5-5]" />
+      </res_util>
+    </event>
+    <event>
+      <prop key="name" value="root_region.hdr_ID00007@mDiffFit" />
+      <prop key="start" value="32.6213" />
+      <prop key="end" value="32.6216" />
+      <prop key="type" value="SD" />
+      <res_util>
+        <select resources="0.[0-0]" />
+        <select resources="0.[2-2]" />
+      </res_util>
+    </event>
+    <event>
+      <prop key="name" value="ID00000@mProjectPP_p2mass-atlas-ID00000s-jID00000_area.fits_ID00005@mDiffFit" />
+      <prop key="start" value="32.621" />
+      <prop key="end" value="32.6294" />
+      <prop key="type" value="SD" />
+      <res_util>
+        <select resources="0.[0-0]" />
+      </res_util>
+    </event>
+    <event>
+      <prop key="name" value="ID00000@mProjectPP_p2mass-atlas-ID00000s-jID00000.fits_ID00005@mDiffFit" />
+      <prop key="start" value="32.621" />
+      <prop key="end" value="32.6294" />
+      <prop key="type" value="SD" />
+      <res_util>
+        <select resources="0.[0-0]" />
+      </res_util>
+    </event>
+    <event>
+      <prop key="name" value="ID00001@mProjectPP_p2mass-atlas-ID00001s-jID00001_area.fits_ID00006@mDiffFit" />
+      <prop key="start" value="32.621" />
+      <prop key="end" value="32.6294" />
+      <prop key="type" value="SD" />
+      <res_util>
+        <select resources="0.[6-6]" />
+      </res_util>
+    </event>
+    <event>
+      <prop key="name" value="ID00001@mProjectPP_p2mass-atlas-ID00001s-jID00001.fits_ID00006@mDiffFit" />
+      <prop key="start" value="32.621" />
+      <prop key="end" value="32.6294" />
+      <prop key="type" value="SD" />
+      <res_util>
+        <select resources="0.[6-6]" />
+      </res_util>
+    </event>
+    <event>
+      <prop key="name" value="ID00001@mProjectPP_p2mass-atlas-ID00001s-jID00001_area.fits_ID00009@mDiffFit" />
+      <prop key="start" value="32.6207" />
+      <prop key="end" value="32.6876" />
+      <prop key="type" value="SD" />
+      <res_util>
+        <select resources="0.[4-4]" />
+        <select resources="0.[6-6]" />
+      </res_util>
+    </event>
+    <event>
+      <prop key="name" value="ID00001@mProjectPP_p2mass-atlas-ID00001s-jID00001.fits_ID00009@mDiffFit" />
+      <prop key="start" value="32.6207" />
+      <prop key="end" value="32.6876" />
+      <prop key="type" value="SD" />
+      <res_util>
+        <select resources="0.[4-4]" />
+        <select resources="0.[6-6]" />
+      </res_util>
+    </event>
+    <event>
+      <prop key="name" value="ID00004@mProjectPP_p2mass-atlas-ID00004s-jID00004_area.fits_ID00012@mDiffFit" />
+      <prop key="start" value="32.6212" />
+      <prop key="end" value="32.6878" />
+      <prop key="type" value="SD" />
+      <res_util>
+        <select resources="0.[1-1]" />
+        <select resources="0.[5-5]" />
+      </res_util>
+    </event>
+    <event>
+      <prop key="name" value="ID00004@mProjectPP_p2mass-atlas-ID00004s-jID00004.fits_ID00012@mDiffFit" />
+      <prop key="start" value="32.6212" />
+      <prop key="end" value="32.6878" />
+      <prop key="type" value="SD" />
+      <res_util>
+        <select resources="0.[1-1]" />
+        <select resources="0.[5-5]" />
+      </res_util>
+    </event>
+    <event>
+      <prop key="name" value="ID00001@mProjectPP_p2mass-atlas-ID00001s-jID00001_area.fits_ID00012@mDiffFit" />
+      <prop key="start" value="32.6212" />
+      <prop key="end" value="32.6881" />
+      <prop key="type" value="SD" />
+      <res_util>
+        <select resources="0.[5-6]" />
+      </res_util>
+    </event>
+    <event>
+      <prop key="name" value="ID00001@mProjectPP_p2mass-atlas-ID00001s-jID00001.fits_ID00012@mDiffFit" />
+      <prop key="start" value="32.6212" />
+      <prop key="end" value="32.6881" />
+      <prop key="type" value="SD" />
+      <res_util>
+        <select resources="0.[5-6]" />
+      </res_util>
+    </event>
+    <event>
+      <prop key="name" value="ID00003@mProjectPP_p2mass-atlas-ID00003s-jID00003_area.fits_ID00007@mDiffFit" />
+      <prop key="start" value="32.6213" />
+      <prop key="end" value="32.6882" />
+      <prop key="type" value="SD" />
+      <res_util>
+        <select resources="0.[2-2]" />
+        <select resources="0.[4-4]" />
+      </res_util>
+    </event>
+    <event>
+      <prop key="name" value="ID00003@mProjectPP_p2mass-atlas-ID00003s-jID00003.fits_ID00007@mDiffFit" />
+      <prop key="start" value="32.6213" />
+      <prop key="end" value="32.6882" />
+      <prop key="type" value="SD" />
+      <res_util>
+        <select resources="0.[2-2]" />
+        <select resources="0.[4-4]" />
+      </res_util>
+    </event>
+    <event>
+      <prop key="name" value="ID00002@mProjectPP_p2mass-atlas-ID00002s-jID00002_area.fits_ID00009@mDiffFit" />
+      <prop key="start" value="32.6207" />
+      <prop key="end" value="32.7536" />
+      <prop key="type" value="SD" />
+      <res_util>
+        <select resources="0.[1-1]" />
+        <select resources="0.[4-4]" />
+      </res_util>
+    </event>
+    <event>
+      <prop key="name" value="ID00002@mProjectPP_p2mass-atlas-ID00002s-jID00002.fits_ID00009@mDiffFit" />
+      <prop key="start" value="32.6207" />
+      <prop key="end" value="32.7536" />
+      <prop key="type" value="SD" />
+      <res_util>
+        <select resources="0.[1-1]" />
+        <select resources="0.[4-4]" />
+      </res_util>
+    </event>
+    <event>
+      <prop key="name" value="ID00003@mProjectPP_p2mass-atlas-ID00003s-jID00003_area.fits_ID00011@mDiffFit" />
+      <prop key="start" value="32.6209" />
+      <prop key="end" value="32.7541" />
+      <prop key="type" value="SD" />
+      <res_util>
+        <select resources="0.[1-1]" />
+        <select resources="0.[4-4]" />
+      </res_util>
+    </event>
+    <event>
+      <prop key="name" value="ID00003@mProjectPP_p2mass-atlas-ID00003s-jID00003.fits_ID00011@mDiffFit" />
+      <prop key="start" value="32.6209" />
+      <prop key="end" value="32.7541" />
+      <prop key="type" value="SD" />
+      <res_util>
+        <select resources="0.[1-1]" />
+        <select resources="0.[4-4]" />
+      </res_util>
+    </event>
+    <event>
+      <prop key="name" value="ID00001@mProjectPP_p2mass-atlas-ID00001s-jID00001_area.fits_ID00011@mDiffFit" />
+      <prop key="start" value="32.6209" />
+      <prop key="end" value="32.7542" />
+      <prop key="type" value="SD" />
+      <res_util>
+        <select resources="0.[1-1]" />
+        <select resources="0.[6-6]" />
+      </res_util>
+    </event>
+    <event>
+      <prop key="name" value="ID00001@mProjectPP_p2mass-atlas-ID00001s-jID00001.fits_ID00011@mDiffFit" />
+      <prop key="start" value="32.6209" />
+      <prop key="end" value="32.7542" />
+      <prop key="type" value="SD" />
+      <res_util>
+        <select resources="0.[1-1]" />
+        <select resources="0.[6-6]" />
+      </res_util>
+    </event>
+    <event>
+      <prop key="name" value="ID00000@mProjectPP_p2mass-atlas-ID00000s-jID00000_area.fits_ID00006@mDiffFit" />
+      <prop key="start" value="32.621" />
+      <prop key="end" value="32.7546" />
+      <prop key="type" value="SD" />
+      <res_util>
+        <select resources="0.[0-0]" />
+        <select resources="0.[6-6]" />
+      </res_util>
+    </event>
+    <event>
+      <prop key="name" value="ID00000@mProjectPP_p2mass-atlas-ID00000s-jID00000.fits_ID00006@mDiffFit" />
+      <prop key="start" value="32.621" />
+      <prop key="end" value="32.7546" />
+      <prop key="type" value="SD" />
+      <res_util>
+        <select resources="0.[0-0]" />
+        <select resources="0.[6-6]" />
+      </res_util>
+    </event>
+    <event>
+      <prop key="name" value="ID00001@mProjectPP_p2mass-atlas-ID00001s-jID00001_area.fits_ID00007@mDiffFit" />
+      <prop key="start" value="32.6213" />
+      <prop key="end" value="32.7546" />
+      <prop key="type" value="SD" />
+      <res_util>
+        <select resources="0.[2-2]" />
+        <select resources="0.[6-6]" />
+      </res_util>
+    </event>
+    <event>
+      <prop key="name" value="ID00001@mProjectPP_p2mass-atlas-ID00001s-jID00001.fits_ID00007@mDiffFit" />
+      <prop key="start" value="32.6213" />
+      <prop key="end" value="32.7546" />
+      <prop key="type" value="SD" />
+      <res_util>
+        <select resources="0.[2-2]" />
+        <select resources="0.[6-6]" />
+      </res_util>
+    </event>
+    <event>
+      <prop key="name" value="ID00001@mProjectPP_p2mass-atlas-ID00001s-jID00001_area.fits_ID00005@mDiffFit" />
+      <prop key="start" value="32.621" />
+      <prop key="end" value="32.7546" />
+      <prop key="type" value="SD" />
+      <res_util>
+        <select resources="0.[0-0]" />
+        <select resources="0.[6-6]" />
+      </res_util>
+    </event>
+    <event>
+      <prop key="name" value="ID00001@mProjectPP_p2mass-atlas-ID00001s-jID00001.fits_ID00005@mDiffFit" />
+      <prop key="start" value="32.621" />
+      <prop key="end" value="32.7546" />
+      <prop key="type" value="SD" />
+      <res_util>
+        <select resources="0.[0-0]" />
+        <select resources="0.[6-6]" />
+      </res_util>
+    </event>
+    <event>
+      <prop key="name" value="ID00008@mDiffFit" />
+      <prop key="start" value="29.5414" />
+      <prop key="end" value="41.2811" />
+      <prop key="type" value="SD" />
+      <res_util>
+        <select resources="0.[1-1]" />
+      </res_util>
+    </event>
+    <event>
+      <prop key="name" value="ID00013@mDiffFit" />
+      <prop key="start" value="30.4255" />
+      <prop key="end" value="43.6231" />
+      <prop key="type" value="SD" />
+      <res_util>
+        <select resources="0.[0-0]" />
+      </res_util>
+    </event>
+    <event>
+      <prop key="name" value="ID00009@mDiffFit" />
+      <prop key="start" value="32.7536" />
+      <prop key="end" value="50.5058" />
+      <prop key="type" value="SD" />
+      <res_util>
+        <select resources="0.[4-4]" />
+      </res_util>
+    </event>
+    <event>
+      <prop key="name" value="ID00011@mDiffFit" />
+      <prop key="start" value="41.2811" />
+      <prop key="end" value="52.695" />
+      <prop key="type" value="SD" />
+      <res_util>
+        <select resources="0.[1-1]" />
+      </res_util>
+    </event>
+    <event>
+      <prop key="name" value="ID00005@mDiffFit" />
+      <prop key="start" value="43.6231" />
+      <prop key="end" value="57.1007" />
+      <prop key="type" value="SD" />
+      <res_util>
+        <select resources="0.[0-0]" />
+      </res_util>
+    </event>
+    <event>
+      <prop key="name" value="ID00006@mDiffFit" />
+      <prop key="start" value="32.7546" />
+      <prop key="end" value="57.6812" />
+      <prop key="type" value="SD" />
+      <res_util>
+        <select resources="0.[6-6]" />
+      </res_util>
+    </event>
+    <event>
+      <prop key="name" value="ID00012@mDiffFit" />
+      <prop key="start" value="32.6881" />
+      <prop key="end" value="57.8331" />
+      <prop key="type" value="SD" />
+      <res_util>
+        <select resources="0.[5-5]" />
+      </res_util>
+    </event>
+    <event>
+      <prop key="name" value="ID00007@mDiffFit" />
+      <prop key="start" value="32.7546" />
+      <prop key="end" value="60.4112" />
+      <prop key="type" value="SD" />
+      <res_util>
+        <select resources="0.[2-2]" />
+      </res_util>
+    </event>
+    <event>
+      <prop key="name" value="ID00008@mDiffFit_fit.txt_ID00014@mConcatFit" />
+      <prop key="start" value="60.4112" />
+      <prop key="end" value="60.4112" />
+      <prop key="type" value="SD" />
+      <res_util>
+        <select resources="0.[1-1]" />
+      </res_util>
+    </event>
+    <event>
+      <prop key="name" value="ID00011@mDiffFit_fit.txt_ID00014@mConcatFit" />
+      <prop key="start" value="60.4112" />
+      <prop key="end" value="60.4112" />
+      <prop key="type" value="SD" />
+      <res_util>
+        <select resources="0.[1-1]" />
+      </res_util>
+    </event>
+    <event>
+      <prop key="name" value="ID00012@mDiffFit_fit.txt_ID00014@mConcatFit" />
+      <prop key="start" value="60.4112" />
+      <prop key="end" value="60.4113" />
+      <prop key="type" value="SD" />
+      <res_util>
+        <select resources="0.[1-1]" />
+        <select resources="0.[5-5]" />
+      </res_util>
+    </event>
+    <event>
+      <prop key="name" value="ID00009@mDiffFit_fit.txt_ID00014@mConcatFit" />
+      <prop key="start" value="60.4112" />
+      <prop key="end" value="60.4113" />
+      <prop key="type" value="SD" />
+      <res_util>
+        <select resources="0.[1-1]" />
+        <select resources="0.[4-4]" />
+      </res_util>
+    </event>
+    <event>
+      <prop key="name" value="root_fits_list.tbl_ID00014@mConcatFit" />
+      <prop key="start" value="60.4112" />
+      <prop key="end" value="60.4113" />
+      <prop key="type" value="SD" />
+      <res_util>
+        <select resources="0.[0-1]" />
+      </res_util>
+    </event>
+    <event>
+      <prop key="name" value="ID00005@mDiffFit_fit.txt_ID00014@mConcatFit" />
+      <prop key="start" value="60.4112" />
+      <prop key="end" value="60.4113" />
+      <prop key="type" value="SD" />
+      <res_util>
+        <select resources="0.[0-1]" />
+      </res_util>
+    </event>
+    <event>
+      <prop key="name" value="ID00010@mDiffFit_fit.txt_ID00014@mConcatFit" />
+      <prop key="start" value="60.4112" />
+      <prop key="end" value="60.4113" />
+      <prop key="type" value="SD" />
+      <res_util>
+        <select resources="0.[0-1]" />
+      </res_util>
+    </event>
+    <event>
+      <prop key="name" value="ID00013@mDiffFit_fit.txt_ID00014@mConcatFit" />
+      <prop key="start" value="60.4112" />
+      <prop key="end" value="60.4113" />
+      <prop key="type" value="SD" />
+      <res_util>
+        <select resources="0.[0-1]" />
+      </res_util>
+    </event>
+    <event>
+      <prop key="name" value="ID00006@mDiffFit_fit.txt_ID00014@mConcatFit" />
+      <prop key="start" value="60.4112" />
+      <prop key="end" value="60.4114" />
+      <prop key="type" value="SD" />
+      <res_util>
+        <select resources="0.[1-1]" />
+        <select resources="0.[6-6]" />
+      </res_util>
+    </event>
+    <event>
+      <prop key="name" value="ID00007@mDiffFit_fit.txt_ID00014@mConcatFit" />
+      <prop key="start" value="60.4112" />
+      <prop key="end" value="60.4114" />
+      <prop key="type" value="SD" />
+      <res_util>
+        <select resources="0.[1-2]" />
+      </res_util>
+    </event>
+    <event>
+      <prop key="name" value="ID00008@mDiffFit_diff.txt_ID00014@mConcatFit" />
+      <prop key="start" value="60.4112" />
+      <prop key="end" value="60.412" />
+      <prop key="type" value="SD" />
+      <res_util>
+        <select resources="0.[1-1]" />
+      </res_util>
+    </event>
+    <event>
+      <prop key="name" value="ID00011@mDiffFit_diff.txt_ID00014@mConcatFit" />
+      <prop key="start" value="60.4112" />
+      <prop key="end" value="60.412" />
+      <prop key="type" value="SD" />
+      <res_util>
+        <select resources="0.[1-1]" />
+      </res_util>
+    </event>
+    <event>
+      <prop key="name" value="ID00009@mDiffFit_diff.txt_ID00014@mConcatFit" />
+      <prop key="start" value="60.4112" />
+      <prop key="end" value="60.4145" />
+      <prop key="type" value="SD" />
+      <res_util>
+        <select resources="0.[1-1]" />
+        <select resources="0.[4-4]" />
+      </res_util>
+    </event>
+    <event>
+      <prop key="name" value="ID00012@mDiffFit_diff.txt_ID00014@mConcatFit" />
+      <prop key="start" value="60.4112" />
+      <prop key="end" value="60.4145" />
+      <prop key="type" value="SD" />
+      <res_util>
+        <select resources="0.[1-1]" />
+        <select resources="0.[5-5]" />
+      </res_util>
+    </event>
+    <event>
+      <prop key="name" value="ID00006@mDiffFit_diff.txt_ID00014@mConcatFit" />
+      <prop key="start" value="60.4112" />
+      <prop key="end" value="60.4179" />
+      <prop key="type" value="SD" />
+      <res_util>
+        <select resources="0.[1-1]" />
+        <select resources="0.[6-6]" />
+      </res_util>
+    </event>
+    <event>
+      <prop key="name" value="ID00007@mDiffFit_diff.txt_ID00014@mConcatFit" />
+      <prop key="start" value="60.4112" />
+      <prop key="end" value="60.4179" />
+      <prop key="type" value="SD" />
+      <res_util>
+        <select resources="0.[1-2]" />
+      </res_util>
+    </event>
+    <event>
+      <prop key="name" value="ID00005@mDiffFit_diff.txt_ID00014@mConcatFit" />
+      <prop key="start" value="60.4112" />
+      <prop key="end" value="60.4211" />
+      <prop key="type" value="SD" />
+      <res_util>
+        <select resources="0.[0-1]" />
+      </res_util>
+    </event>
+    <event>
+      <prop key="name" value="ID00010@mDiffFit_diff.txt_ID00014@mConcatFit" />
+      <prop key="start" value="60.4112" />
+      <prop key="end" value="60.4211" />
+      <prop key="type" value="SD" />
+      <res_util>
+        <select resources="0.[0-1]" />
+      </res_util>
+    </event>
+    <event>
+      <prop key="name" value="ID00013@mDiffFit_diff.txt_ID00014@mConcatFit" />
+      <prop key="start" value="60.4112" />
+      <prop key="end" value="60.4211" />
+      <prop key="type" value="SD" />
+      <res_util>
+        <select resources="0.[0-1]" />
+      </res_util>
+    </event>
+    <event>
+      <prop key="name" value="ID00014@mConcatFit" />
+      <prop key="start" value="60.4211" />
+      <prop key="end" value="61.203" />
+      <prop key="type" value="SD" />
+      <res_util>
+        <select resources="0.[1-1]" />
+      </res_util>
+    </event>
+    <event>
+      <prop key="name" value="ID00014@mConcatFit_fits.tbl_ID00015@mBgModel" />
+      <prop key="start" value="61.203" />
+      <prop key="end" value="61.203" />
+      <prop key="type" value="SD" />
+      <res_util>
+        <select resources="0.[1-1]" />
+      </res_util>
+    </event>
+    <event>
+      <prop key="name" value="root_pimages.tbl_ID00015@mBgModel" />
+      <prop key="start" value="61.203" />
+      <prop key="end" value="61.2031" />
+      <prop key="type" value="SD" />
+      <res_util>
+        <select resources="0.[0-1]" />
+      </res_util>
+    </event>
+    <event>
+      <prop key="name" value="ID00015@mBgModel" />
+      <prop key="start" value="61.2031" />
+      <prop key="end" value="62.7452" />
+      <prop key="type" value="SD" />
+      <res_util>
+        <select resources="0.[1-1]" />
+      </res_util>
+    </event>
+    <event>
+      <prop key="name" value="ID00015@mBgModel_corrections.tbl_ID00016@mBackground" />
+      <prop key="start" value="62.7452" />
+      <prop key="end" value="62.7452" />
+      <prop key="type" value="SD" />
+      <res_util>
+        <select resources="0.[1-1]" />
+      </res_util>
+    </event>
+    <event>
+      <prop key="name" value="ID00015@mBgModel_corrections.tbl_ID00017@mBackground" />
+      <prop key="start" value="62.7452" />
+      <prop key="end" value="62.7453" />
+      <prop key="type" value="SD" />
+      <res_util>
+        <select resources="0.[0-1]" />
+      </res_util>
+    </event>
+    <event>
+      <prop key="name" value="ID00015@mBgModel_corrections.tbl_ID00020@mBackground" />
+      <prop key="start" value="62.7453" />
+      <prop key="end" value="62.7454" />
+      <prop key="type" value="SD" />
+      <res_util>
+        <select resources="0.[1-1]" />
+        <select resources="0.[4-4]" />
+      </res_util>
+    </event>
+    <event>
+      <prop key="name" value="ID00015@mBgModel_corrections.tbl_ID00018@mBackground" />
+      <prop key="start" value="62.7454" />
+      <prop key="end" value="62.7455" />
+      <prop key="type" value="SD" />
+      <res_util>
+        <select resources="0.[1-1]" />
+      </res_util>
+    </event>
+    <event>
+      <prop key="name" value="ID00015@mBgModel_corrections.tbl_ID00019@mBackground" />
+      <prop key="start" value="62.7455" />
+      <prop key="end" value="62.7457" />
+      <prop key="type" value="SD" />
+      <res_util>
+        <select resources="0.[1-1]" />
+        <select resources="0.[6-6]" />
+      </res_util>
+    </event>
+    <event>
+      <prop key="name" value="ID00002@mProjectPP_p2mass-atlas-ID00002s-jID00002_area.fits_ID00018@mBackground" />
+      <prop key="start" value="62.7454" />
+      <prop key="end" value="62.7538" />
+      <prop key="type" value="SD" />
+      <res_util>
+        <select resources="0.[1-1]" />
+      </res_util>
+    </event>
+    <event>
+      <prop key="name" value="ID00002@mProjectPP_p2mass-atlas-ID00002s-jID00002.fits_ID00018@mBackground" />
+      <prop key="start" value="62.7454" />
+      <prop key="end" value="62.7538" />
+      <prop key="type" value="SD" />
+      <res_util>
+        <select resources="0.[1-1]" />
+      </res_util>
+    </event>
+    <event>
+      <prop key="name" value="ID00004@mProjectPP_p2mass-atlas-ID00004s-jID00004_area.fits_ID00020@mBackground" />
+      <prop key="start" value="62.7453" />
+      <prop key="end" value="62.8119" />
+      <prop key="type" value="SD" />
+      <res_util>
+        <select resources="0.[1-1]" />
+        <select resources="0.[4-4]" />
+      </res_util>
+    </event>
+    <event>
+      <prop key="name" value="ID00004@mProjectPP_p2mass-atlas-ID00004s-jID00004.fits_ID00020@mBackground" />
+      <prop key="start" value="62.7453" />
+      <prop key="end" value="62.8119" />
+      <prop key="type" value="SD" />
+      <res_util>
+        <select resources="0.[1-1]" />
+        <select resources="0.[4-4]" />
+      </res_util>
+    </event>
+    <event>
+      <prop key="name" value="ID00000@mProjectPP_p2mass-atlas-ID00000s-jID00000_area.fits_ID00016@mBackground" />
+      <prop key="start" value="62.7452" />
+      <prop key="end" value="62.812" />
+      <prop key="type" value="SD" />
+      <res_util>
+        <select resources="0.[0-1]" />
+      </res_util>
+    </event>
+    <event>
+      <prop key="name" value="ID00000@mProjectPP_p2mass-atlas-ID00000s-jID00000.fits_ID00016@mBackground" />
+      <prop key="start" value="62.7452" />
+      <prop key="end" value="62.812" />
+      <prop key="type" value="SD" />
+      <res_util>
+        <select resources="0.[0-1]" />
+      </res_util>
+    </event>
+    <event>
+      <prop key="name" value="ID00001@mProjectPP_p2mass-atlas-ID00001s-jID00001_area.fits_ID00017@mBackground" />
+      <prop key="start" value="62.7452" />
+      <prop key="end" value="62.8122" />
+      <prop key="type" value="SD" />
+      <res_util>
+        <select resources="0.[0-0]" />
+        <select resources="0.[6-6]" />
+      </res_util>
+    </event>
+    <event>
+      <prop key="name" value="ID00001@mProjectPP_p2mass-atlas-ID00001s-jID00001.fits_ID00017@mBackground" />
+      <prop key="start" value="62.7452" />
+      <prop key="end" value="62.8122" />
+      <prop key="type" value="SD" />
+      <res_util>
+        <select resources="0.[0-0]" />
+        <select resources="0.[6-6]" />
+      </res_util>
+    </event>
+    <event>
+      <prop key="name" value="ID00003@mProjectPP_p2mass-atlas-ID00003s-jID00003_area.fits_ID00019@mBackground" />
+      <prop key="start" value="62.7455" />
+      <prop key="end" value="62.8123" />
+      <prop key="type" value="SD" />
+      <res_util>
+        <select resources="0.[4-4]" />
+        <select resources="0.[6-6]" />
+      </res_util>
+    </event>
+    <event>
+      <prop key="name" value="ID00003@mProjectPP_p2mass-atlas-ID00003s-jID00003.fits_ID00019@mBackground" />
+      <prop key="start" value="62.7455" />
+      <prop key="end" value="62.8123" />
+      <prop key="type" value="SD" />
+      <res_util>
+        <select resources="0.[4-4]" />
+        <select resources="0.[6-6]" />
+      </res_util>
+    </event>
+    <event>
+      <prop key="name" value="ID00016@mBackground" />
+      <prop key="start" value="62.812" />
+      <prop key="end" value="74.0956" />
+      <prop key="type" value="SD" />
+      <res_util>
+        <select resources="0.[1-1]" />
+      </res_util>
+    </event>
+    <event>
+      <prop key="name" value="ID00017@mBackground" />
+      <prop key="start" value="62.8122" />
+      <prop key="end" value="76.3534" />
+      <prop key="type" value="SD" />
+      <res_util>
+        <select resources="0.[0-0]" />
+      </res_util>
+    </event>
+    <event>
+      <prop key="name" value="ID00020@mBackground" />
+      <prop key="start" value="62.8119" />
+      <prop key="end" value="81.021" />
+      <prop key="type" value="SD" />
+      <res_util>
+        <select resources="0.[4-4]" />
+      </res_util>
+    </event>
+    <event>
+      <prop key="name" value="ID00018@mBackground" />
+      <prop key="start" value="74.0956" />
+      <prop key="end" value="85.857" />
+      <prop key="type" value="SD" />
+      <res_util>
+        <select resources="0.[1-1]" />
+      </res_util>
+    </event>
+    <event>
+      <prop key="name" value="ID00019@mBackground" />
+      <prop key="start" value="62.8123" />
+      <prop key="end" value="88.5392" />
+      <prop key="type" value="SD" />
+      <res_util>
+        <select resources="0.[6-6]" />
+      </res_util>
+    </event>
+    <event>
+      <prop key="name" value="root_cimages.tbl_ID00021@mImgTbl" />
+      <prop key="start" value="88.5392" />
+      <prop key="end" value="88.5393" />
+      <prop key="type" value="SD" />
+      <res_util>
+        <select resources="0.[0-1]" />
+      </res_util>
+    </event>
+    <event>
+      <prop key="name" value="ID00016@mBackground_c2mass-atlas-ID00000s-jID00000.fits_ID00021@mImgTbl" />
+      <prop key="start" value="88.5392" />
+      <prop key="end" value="88.5476" />
+      <prop key="type" value="SD" />
+      <res_util>
+        <select resources="0.[1-1]" />
+      </res_util>
+    </event>
+    <event>
+      <prop key="name" value="ID00016@mBackground_c2mass-atlas-ID00000s-jID00000_area.fits_ID00021@mImgTbl" />
+      <prop key="start" value="88.5392" />
+      <prop key="end" value="88.5476" />
+      <prop key="type" value="SD" />
+      <res_util>
+        <select resources="0.[1-1]" />
+      </res_util>
+    </event>
+    <event>
+      <prop key="name" value="ID00018@mBackground_c2mass-atlas-ID00002s-jID00002.fits_ID00021@mImgTbl" />
+      <prop key="start" value="88.5392" />
+      <prop key="end" value="88.5476" />
+      <prop key="type" value="SD" />
+      <res_util>
+        <select resources="0.[1-1]" />
+      </res_util>
+    </event>
+    <event>
+      <prop key="name" value="ID00018@mBackground_c2mass-atlas-ID00002s-jID00002_area.fits_ID00021@mImgTbl" />
+      <prop key="start" value="88.5392" />
+      <prop key="end" value="88.5476" />
+      <prop key="type" value="SD" />
+      <res_util>
+        <select resources="0.[1-1]" />
+      </res_util>
+    </event>
+    <event>
+      <prop key="name" value="ID00020@mBackground_c2mass-atlas-ID00004s-jID00004.fits_ID00021@mImgTbl" />
+      <prop key="start" value="88.5392" />
+      <prop key="end" value="88.6058" />
+      <prop key="type" value="SD" />
+      <res_util>
+        <select resources="0.[1-1]" />
+        <select resources="0.[4-4]" />
+      </res_util>
+    </event>
+    <event>
+      <prop key="name" value="ID00020@mBackground_c2mass-atlas-ID00004s-jID00004_area.fits_ID00021@mImgTbl" />
+      <prop key="start" value="88.5392" />
+      <prop key="end" value="88.6058" />
+      <prop key="type" value="SD" />
+      <res_util>
+        <select resources="0.[1-1]" />
+        <select resources="0.[4-4]" />
+      </res_util>
+    </event>
+    <event>
+      <prop key="name" value="ID00017@mBackground_c2mass-atlas-ID00001s-jID00001.fits_ID00021@mImgTbl" />
+      <prop key="start" value="88.5392" />
+      <prop key="end" value="88.6059" />
+      <prop key="type" value="SD" />
+      <res_util>
+        <select resources="0.[0-1]" />
+      </res_util>
+    </event>
+    <event>
+      <prop key="name" value="ID00017@mBackground_c2mass-atlas-ID00001s-jID00001_area.fits_ID00021@mImgTbl" />
+      <prop key="start" value="88.5392" />
+      <prop key="end" value="88.6059" />
+      <prop key="type" value="SD" />
+      <res_util>
+        <select resources="0.[0-1]" />
+      </res_util>
+    </event>
+    <event>
+      <prop key="name" value="ID00019@mBackground_c2mass-atlas-ID00003s-jID00003_area.fits_ID00021@mImgTbl" />
+      <prop key="start" value="88.5392" />
+      <prop key="end" value="88.6061" />
+      <prop key="type" value="SD" />
+      <res_util>
+        <select resources="0.[1-1]" />
+        <select resources="0.[6-6]" />
+      </res_util>
+    </event>
+    <event>
+      <prop key="name" value="ID00019@mBackground_c2mass-atlas-ID00003s-jID00003.fits_ID00021@mImgTbl" />
+      <prop key="start" value="88.5392" />
+      <prop key="end" value="88.6061" />
+      <prop key="type" value="SD" />
+      <res_util>
+        <select resources="0.[1-1]" />
+        <select resources="0.[6-6]" />
+      </res_util>
+    </event>
+    <event>
+      <prop key="name" value="ID00021@mImgTbl" />
+      <prop key="start" value="88.6061" />
+      <prop key="end" value="90.1157" />
+      <prop key="type" value="SD" />
+      <res_util>
+        <select resources="0.[1-1]" />
+      </res_util>
+    </event>
+    <event>
+      <prop key="name" value="ID00021@mImgTbl_newcimages.tbl_ID00022@mAdd" />
+      <prop key="start" value="90.1157" />
+      <prop key="end" value="90.1157" />
+      <prop key="type" value="SD" />
+      <res_util>
+        <select resources="0.[1-1]" />
+      </res_util>
+    </event>
+    <event>
+      <prop key="name" value="root_region.hdr_ID00022@mAdd" />
+      <prop key="start" value="90.1157" />
+      <prop key="end" value="90.1158" />
+      <prop key="type" value="SD" />
+      <res_util>
+        <select resources="0.[0-1]" />
+      </res_util>
+    </event>
+    <event>
+      <prop key="name" value="ID00022@mAdd" />
+      <prop key="start" value="90.1158" />
+      <prop key="end" value="93.4064" />
+      <prop key="type" value="SD" />
+      <res_util>
+        <select resources="0.[1-1]" />
+      </res_util>
+    </event>
+    <event>
+      <prop key="name" value="ID00022@mAdd_mosaic_ID00022_ID00022.fits_ID00023@mShrink" />
+      <prop key="start" value="93.4064" />
+      <prop key="end" value="93.4998" />
+      <prop key="type" value="SD" />
+      <res_util>
+        <select resources="0.[1-1]" />
+      </res_util>
+    </event>
+    <event>
+      <prop key="name" value="ID00022@mAdd_mosaic_ID00022_ID00022_area.fits_ID00023@mShrink" />
+      <prop key="start" value="93.4064" />
+      <prop key="end" value="93.4998" />
+      <prop key="type" value="SD" />
+      <res_util>
+        <select resources="0.[1-1]" />
+      </res_util>
+    </event>
+    <event>
+      <prop key="name" value="ID00023@mShrink" />
+      <prop key="start" value="93.4998" />
+      <prop key="end" value="97.6917" />
+      <prop key="type" value="SD" />
+      <res_util>
+        <select resources="0.[1-1]" />
+      </res_util>
+    </event>
+    <event>
+      <prop key="name" value="ID00023@mShrink_shrunken_ID00023_ID00023.fits_ID00024@mJPEG" />
+      <prop key="start" value="97.6917" />
+      <prop key="end" value="97.6955" />
+      <prop key="type" value="SD" />
+      <res_util>
+        <select resources="0.[1-1]" />
+      </res_util>
+    </event>
+    <event>
+      <prop key="name" value="ID00024@mJPEG" />
+      <prop key="start" value="97.6955" />
+      <prop key="end" value="98.1842" />
+      <prop key="type" value="SD" />
+      <res_util>
+        <select resources="0.[1-1]" />
+      </res_util>
+    </event>
+    <event>
+      <prop key="name" value="ID00024@mJPEG_shrunken_ID00023_ID00023.jpg_end" />
+      <prop key="start" value="98.1842" />
+      <prop key="end" value="98.1846" />
+      <prop key="type" value="SD" />
+      <res_util>
+        <select resources="0.[1-1]" />
+      </res_util>
+    </event>
+    <event>
+      <prop key="name" value="end" />
+      <prop key="start" value="98.1846" />
+      <prop key="end" value="98.1846" />
+      <prop key="type" value="SD" />
+      <res_util>
+        <select resources="0.[1-1]" />
+      </res_util>
+    </event>
+  </events>
+</jedule>
index 40798d9..2da2182 100644 (file)
@@ -34,5 +34,4 @@ $ $SG_TEST_EXENV ${bindir:=.}/scheduling/sd_scheduling --log=sd_daxparse.thresh:
 > [98.184618] [test/INFO] ------------------- Produce the trace file---------------------------
 > [98.184618] [test/INFO] Producing a jedule output (if active) of the run into minmin_test.jed
 
-
-$ cmake -E remove -f ${srcdir:=.}/minmin_test.jed 
\ No newline at end of file
+$ cmake -E remove -f ${srcdir:=.}/scheduling/sd_scheduling.jed 
\ No newline at end of file
diff --git a/include/simgrid/jedule/jedule_events.h b/include/simgrid/jedule/jedule_events.h
deleted file mode 100644 (file)
index d2a5bdf..0000000
+++ /dev/null
@@ -1,40 +0,0 @@
-/* Copyright (c) 2010-2012, 2014-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 JEDULE_EVENTS_H_
-#define JEDULE_EVENTS_H_
-
-#include "simgrid_config.h"
-#include "xbt/dynar.h"
-#include "xbt/dict.h"
-#include "simgrid/jedule/jedule_platform.h"
-
-#if HAVE_JEDULE
-SG_BEGIN_DECL()
-
-struct jed_event {
-  int event_id;
-  char *name;
-  double start_time;
-  double end_time;
-  char *type;
-  xbt_dynar_t resource_subsets;
-  xbt_dynar_t characteristics_list; /* just a list of names (strings) */
-  xbt_dict_t info_hash;     /* key/value pairs */
-};
-
-typedef struct jed_event s_jed_event_t, *jed_event_t;
-
-void create_jed_event(jed_event_t *event, char *name, double start_time, double end_time, const char *type);
-void jed_event_free(jed_event_t event);
-void jed_event_add_resources(jed_event_t event, xbt_dynar_t host_selection);
-void jed_event_add_characteristic(jed_event_t event, char *characteristic);
-void jed_event_add_info(jed_event_t event, char *key, char *value);
-
-SG_END_DECL()
-#endif
-
-#endif /* JEDULE_EVENTS_H_ */
diff --git a/include/simgrid/jedule/jedule_events.hpp b/include/simgrid/jedule/jedule_events.hpp
new file mode 100644 (file)
index 0000000..1ccee5c
--- /dev/null
@@ -0,0 +1,54 @@
+/* Copyright (c) 2010-2012, 2014-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 JEDULE_EVENTS_H_
+#define JEDULE_EVENTS_H_
+
+#include "simgrid_config.h"
+#include "simgrid/forward.h"
+#include <vector>
+#include <string>
+#include <unordered_map>
+
+#include "jedule_platform.hpp"
+
+#if HAVE_JEDULE
+namespace simgrid {
+namespace jedule{
+
+XBT_PUBLIC_CLASS Event{
+  private:
+    ~Event()=default;
+  public:
+    Event(std::string name, double start_time, double end_time, std::string type)
+      : name(name), start_time(start_time), end_time(end_time), type(type){}
+    void deleteEvent();
+    void addCharacteristic(char *characteristic);
+    void addResources(std::vector<sg_host_t> *host_selection);
+    void addInfo(char *key, char *value);
+    void print(FILE *file);
+
+  private:
+    std::string name;
+    double start_time;
+    double end_time;
+    std::string type;
+    std::vector<jed_res_subset_t> resource_subsets;
+    std::vector<char*> characteristics_list; /* just a list of names (strings) */
+    std::unordered_map<char*, char*> info_map;     /* key/value pairs */
+};
+}
+}
+
+SG_BEGIN_DECL()
+
+typedef simgrid::jedule::Event * jed_event_t;
+
+SG_END_DECL()
+
+#endif
+
+#endif /* JEDULE_EVENTS_H_ */
similarity index 87%
rename from include/simgrid/jedule/jedule_output.h
rename to include/simgrid/jedule/jedule_output.hpp
index 6b50c76..63d9e35 100644 (file)
@@ -9,17 +9,18 @@
 
 #include <stdio.h>
 #include "simgrid_config.h"
-#include "jedule_events.h"
-#include "jedule_platform.h"
+
+#include "jedule_events.hpp"
+#include "jedule_platform.hpp"
 
 #if HAVE_JEDULE
 SG_BEGIN_DECL()
-
 extern xbt_dynar_t jedule_event_list;
+
 void jedule_init_output(void);
 void jedule_cleanup_output(void);
 void jedule_store_event(jed_event_t event);
-void write_jedule_output(FILE *file, jedule_t jedule, xbt_dynar_t event_list, xbt_dict_t meta_info_dict);
+void write_jedule_output(FILE *file, jedule_t jedule, xbt_dynar_t event_list);
 
 SG_END_DECL()
 #endif
similarity index 61%
rename from include/simgrid/jedule/jedule_platform.h
rename to include/simgrid/jedule/jedule_platform.hpp
index 38df596..618f9e0 100644 (file)
@@ -8,47 +8,63 @@
 #define JED_SIMGRID_PLATFORM_H_
 
 #include "simgrid_config.h"
+#include "simgrid/forward.h"
 #include "xbt/dynar.h"
 #include "xbt/dict.h"
+#include <unordered_map>
+#include <vector>
+#include <string>
 
 #if HAVE_JEDULE
-SG_BEGIN_DECL()
-
-typedef struct jed_simgrid_container s_jed_simgrid_container_t, *jed_simgrid_container_t;
 
-
-struct jed_simgrid_container {
-  char *name;
-  xbt_dynar_t container_children;
-  jed_simgrid_container_t parent;
-  xbt_dynar_t resource_list;
-  xbt_dict_t name2id;
+namespace simgrid {
+namespace jedule{
+XBT_PUBLIC_CLASS Container {
+public:
+  Container(std::string name);
+  ~Container()=default;
+private:
   int last_id;
   int is_lowest;
+public:
+  std::string name;
+  std::unordered_map<const char*, int> name2id;
+  Container *parent;
+  std::vector<Container*> children;
+  std::vector<sg_host_t> resource_list;
+  void addChild(Container* child);
+  void addResources(std::vector<sg_host_t> hosts);
+  void createHierarchy(AS_t from_as);
+  std::vector<int> getHierarchy();
+  std::string getHierarchyAsString();
+  void print(FILE *file);
+  void printResources(FILE *file);
 };
 
+}
+}
+SG_BEGIN_DECL()
+typedef simgrid::jedule::Container * jed_container_t;
+
 /** selection of a subset of resources from the original set */
 struct jed_res_subset {
-  jed_simgrid_container_t parent;
+  jed_container_t parent;
   int start_idx; // start idx in resource_list of container
   int nres;      // number of resources spanning starting at start_idx
 };
 
 typedef struct jed_res_subset s_jed_res_subset_t, *jed_res_subset_t;
 
-struct jedule_struct {
-  jed_simgrid_container_t root_container;
-  xbt_dict_t jedule_meta_info;
-};
+typedef struct jedule_struct {
+  jed_container_t root_container;
+  std::unordered_map<char*, char*> jedule_meta_info;
+} s_jedule_t;
 
-typedef struct jedule_struct s_jedule_t, *jedule_t;
+typedef s_jedule_t *jedule_t;
 
 void jed_create_jedule(jedule_t *jedule);
 void jed_free_jedule(jedule_t jedule);
 void jedule_add_meta_info(jedule_t jedule, char *key, char *value);
-void jed_simgrid_create_container(jed_simgrid_container_t *container, const char *name);
-void jed_simgrid_add_container(jed_simgrid_container_t parent, jed_simgrid_container_t child);
-void jed_simgrid_add_resources(jed_simgrid_container_t parent, xbt_dynar_t host_names);
 
 /**
  * it is assumed that the host_names in the entire system are unique that means that we don't need parent references
@@ -56,7 +72,7 @@ void jed_simgrid_add_resources(jed_simgrid_container_t parent, xbt_dynar_t host_
  * subset_list must be allocated
  * host_names is the list of host_names associated with an event
  */
-void jed_simgrid_get_resource_selection_by_hosts(xbt_dynar_t subset_list, xbt_dynar_t host_names);
+void jed_simgrid_get_resource_selection_by_hosts(xbt_dynar_t subset_list, std::vector<sg_host_t>* host_list);
 
 /*
   global:
@@ -72,5 +88,4 @@ SG_END_DECL()
 
 #endif
 
-
 #endif /* JED_SIMGRID_PLATFORM_H_ */
index 2c63914..93f494c 100644 (file)
@@ -4,20 +4,27 @@
 /* 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_output.hpp"
 #include <stdio.h>
 #include <stdlib.h>
-#include <string.h>
+#include <string>
 
-#include "xbt/dict.h"
-#include "xbt/dynar.h"
 #include "xbt/asserts.h"
 
-#include "simgrid/jedule/jedule_events.h"
-#include "simgrid/jedule/jedule_platform.h"
-
 #if HAVE_JEDULE
+namespace simgrid{
+namespace jedule{
+
+void Event::deleteEvent(){
+  while (!this->resource_subsets.empty()){
+    xbt_free(this->resource_subsets.back());
+    this->resource_subsets.pop_back();
+  }
+  delete this;
+}
 
-void jed_event_add_resources(jed_event_t event, xbt_dynar_t host_selection) {
+void Event::addResources(std::vector<sg_host_t> *host_selection) {
   xbt_dynar_t resource_subset_list;
   jed_res_subset_t res_set;
   unsigned int i;
@@ -26,52 +33,56 @@ void jed_event_add_resources(jed_event_t event, xbt_dynar_t host_selection) {
 
   jed_simgrid_get_resource_selection_by_hosts(resource_subset_list, host_selection);
   xbt_dynar_foreach(resource_subset_list, i, res_set)  {
-    xbt_dynar_push(event->resource_subsets, &res_set);
+    this->resource_subsets.push_back(res_set);
   }
 
-  xbt_dynar_free(&resource_subset_list);
+  xbt_dynar_free_container(&resource_subset_list);
 }
 
-void jed_event_add_characteristic(jed_event_t event, char *characteristic) {
+void Event::addCharacteristic(char *characteristic) {
   xbt_assert( characteristic != nullptr );
-  xbt_dynar_push(event->characteristics_list, &characteristic);
+  this->characteristics_list.push_back(characteristic);
 }
 
-void jed_event_add_info(jed_event_t event, char *key, char *value) {
-  char *val_cp;
-
-  xbt_assert(key != nullptr);
-  xbt_assert(value != nullptr);
-
-  val_cp = strdup(value);
-  xbt_dict_set(event->info_hash, key, val_cp, nullptr);
+void Event::addInfo(char* key, char *value) {
+  xbt_assert((key != nullptr) && value != nullptr);
+  this->info_map.insert({key, value});
 }
 
-void create_jed_event(jed_event_t *event, char *name, double start_time,
-    double end_time, const char *type) {
-
-  *event = xbt_new0(s_jed_event_t,1);
-  (*event)->name = xbt_strdup(name);
+void Event::print(FILE *jed_file){
+  fprintf(jed_file, "    <event>\n");
+  fprintf(jed_file, "      <prop key=\"name\" value=\"%s\" />\n", this->name.c_str());
+  fprintf(jed_file, "      <prop key=\"start\" value=\"%g\" />\n", this->start_time);
+  fprintf(jed_file, "      <prop key=\"end\" value=\"%g\" />\n", this->end_time);
+  fprintf(jed_file, "      <prop key=\"type\" value=\"%s\" />\n", this->type.c_str());
+
+  xbt_assert(!this->resource_subsets.empty());
+  fprintf(jed_file, "      <res_util>\n");
+  for (auto subset: this->resource_subsets) {
+    fprintf(jed_file, "        <select resources=\"");
+    fprintf(jed_file, "%s", subset->parent->getHierarchyAsString().c_str());
+    fprintf(jed_file, ".[%d-%d]", subset->start_idx, subset->start_idx + subset->nres - 1);
+    fprintf(jed_file, "\" />\n");
+  }
+  fprintf(jed_file, "      </res_util>\n");
 
-  (*event)->start_time = start_time;
-  (*event)->end_time = end_time;
+  if (!this->characteristics_list.empty()){
+    fprintf(jed_file, "      <characteristics>\n");
+    for (auto ch: this->characteristics_list)
+      fprintf(jed_file, "          <characteristic name=\"%s\" />\n", ch);
+    fprintf(jed_file, "      </characteristics>\n");
+  }
 
-  (*event)->type = xbt_strdup(type);
+  if (!this->info_map.empty()){
+    fprintf(jed_file, "      <info>\n");
+    for (auto elm: this->info_map)
+      fprintf(jed_file, "        <prop key=\"%s\" value=\"%s\" />\n",elm.first,elm.second);
+    fprintf(jed_file, "      </info>\n");
+  }
 
-  (*event)->resource_subsets = xbt_dynar_new(sizeof(jed_res_subset_t), xbt_free_ref);
-  (*event)->characteristics_list = xbt_dynar_new(sizeof(char*), nullptr);
-  (*event)->info_hash = xbt_dict_new_homogeneous(nullptr);
+  fprintf(jed_file, "    </event>\n");
 }
 
-void jed_event_free(jed_event_t event) {
-  free(event->name);
-  free(event->type);
-
-  xbt_dynar_free(&event->resource_subsets);
-
-  xbt_dynar_free(&event->characteristics_list);
-  xbt_dict_free(&event->info_hash);
-
-  free(event);
+}
 }
 #endif
index 2b28d09..986762b 100644 (file)
@@ -4,6 +4,9 @@
 /* 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_output.hpp"
+#include "simgrid/host.h"
+
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
@@ -11,8 +14,6 @@
 #include "xbt/dynar.h"
 #include "xbt/asserts.h"
 
-#include "simgrid/jedule/jedule_output.h"
-
 #if HAVE_JEDULE
 
 #define STR_BUF_SIZE 1024
@@ -21,211 +22,45 @@ XBT_LOG_NEW_DEFAULT_SUBCATEGORY(jed_out, jedule, "Logging specific to Jedule out
 
 xbt_dynar_t jedule_event_list;
 
-static FILE *jed_file;
-
-static void get_hierarchy_list(xbt_dynar_t hier_list, jed_simgrid_container_t container) {
-  xbt_assert( container != nullptr );
-
-  if( container->parent != nullptr ) {
-
-    if( container->parent->container_children == nullptr ) {
-      // we are in the last level
-      get_hierarchy_list(hier_list, container->parent);
-    } else {
-      unsigned int i;
-      int child_nb = -1;
-      jed_simgrid_container_t child_container;
-
-      xbt_dynar_foreach(container->parent->container_children, i, child_container) {
-        if( child_container == container ) {
-          child_nb = i;
-          break;
-        }
-      }
-
-      xbt_assert( child_nb > - 1);
-      xbt_dynar_insert_at(hier_list, 0, &child_nb);
-
-      get_hierarchy_list(hier_list, container->parent);
-    }
-  } else {
-    int top_level = 0;
-    xbt_dynar_insert_at(hier_list, 0, &top_level);
-  }
-}
-
-static void get_hierarchy_string(jed_simgrid_container_t container, char *outbuf, int bufsize) {
-    char buf[STR_BUF_SIZE];
-    xbt_dynar_t hier_list;
-    unsigned int iter;
-    int number;
-    unsigned int length;
-
-    outbuf[0] = '\0';
-    hier_list = xbt_dynar_new(sizeof(int), nullptr);
-    get_hierarchy_list(hier_list, container);
-
-    length = xbt_dynar_length(hier_list);
-
-    xbt_dynar_foreach(hier_list, iter, number) {
-        if( iter != length-1 ) {
-            snprintf(buf, STR_BUF_SIZE, "%d.", number);
-        } else {
-            snprintf(buf, STR_BUF_SIZE, "%d", number);
-        }
-        strncat(outbuf, buf, bufsize-strlen(outbuf));
-    }
-
-    xbt_dynar_free(&hier_list);
-}
-
-static void print_key_value_dict(xbt_dict_t key_value_dict) {
-  xbt_dict_cursor_t cursor=nullptr;
-  char *key,*data;
-
-  if( key_value_dict != nullptr ) {
-    xbt_dict_foreach(key_value_dict,cursor,key,data) {
-      fprintf(jed_file, "        <prop key=\"%s\" value=\"%s\" />\n",key,data);
-    }
-  }
-}
-
-static void print_resources(jed_simgrid_container_t resource_parent) {
-  unsigned int res_nb;
-  unsigned int i;
-  char *res_name;
-  char resid[STR_BUF_SIZE];
-  xbt_assert( resource_parent->resource_list != nullptr );
-
-  res_nb = xbt_dynar_length(resource_parent->resource_list);
-
-  get_hierarchy_string(resource_parent, resid, STR_BUF_SIZE);
-
-  fprintf(jed_file, "      <rset id=\"%s\" nb=\"%d\" names=\"", resid, res_nb);
-  xbt_dynar_foreach(resource_parent->resource_list, i, res_name) {
-    fprintf(jed_file, "%s", res_name);
-    if( i != res_nb-1 ) {
-      fprintf(jed_file, "|");
-    }
-  }
-  fprintf(jed_file, "\" />\n");
-}
-
-static void print_container(jed_simgrid_container_t container) {
-  unsigned int i;
-  jed_simgrid_container_t child_container;
-
-  xbt_assert( container != nullptr );
-
-  fprintf(jed_file, "    <res name=\"%s\">\n", container->name);
-  if( container->container_children != nullptr ) {
-    xbt_dynar_foreach(container->container_children, i, child_container) {
-      print_container(child_container);
-    }
-  } else {
-    print_resources(container);
-  }
-  fprintf(jed_file, "    </res>\n");
-}
-
-static void print_platform(jed_simgrid_container_t root_container) {
-  fprintf(jed_file, "  <platform>\n");
-  print_container(root_container);
-  fprintf(jed_file, "  </platform>\n");
-}
-
-static void print_event(jed_event_t event) {
-  unsigned int i;
-  jed_res_subset_t subset;
-
-  xbt_assert( event != nullptr );
-  xbt_assert( event->resource_subsets != nullptr );
-
-  fprintf(jed_file, "    <event>\n");
-
-  fprintf(jed_file, "      <prop key=\"name\" value=\"%s\" />\n", event->name);
-  fprintf(jed_file, "      <prop key=\"start\" value=\"%g\" />\n", event->start_time);
-  fprintf(jed_file, "      <prop key=\"end\" value=\"%g\" />\n", event->end_time);
-  fprintf(jed_file, "      <prop key=\"type\" value=\"%s\" />\n", event->type);
-
-  fprintf(jed_file, "      <res_util>\n");
-
-  xbt_dynar_foreach(event->resource_subsets, i, subset) {
-    int start = subset->start_idx;
-    int end   = subset->start_idx + subset->nres - 1;
-    char resid[STR_BUF_SIZE];
-
-    get_hierarchy_string(subset->parent, resid, STR_BUF_SIZE);
-    fprintf(jed_file, "        <select resources=\"");
-    fprintf(jed_file, "%s", resid);
-    fprintf(jed_file, ".[%d-%d]", start, end);
-    fprintf(jed_file, "\" />\n");
-  }
-
-  fprintf(jed_file, "      </res_util>\n");
-  if (!xbt_dynar_is_empty(event->characteristics_list)){
-    fprintf(jed_file, "      <characteristics>\n");
-    char *ch;
-    unsigned int iter;
-    xbt_dynar_foreach(event->characteristics_list, iter, ch) {
-      fprintf(jed_file, "          <characteristic name=\"%s\" />\n", ch);
-    }
-    fprintf(jed_file, "      </characteristics>\n");
-  }
-
-  if (!xbt_dict_is_empty(event->info_hash)){
-    fprintf(jed_file, "      <info>\n");
-    print_key_value_dict(event->info_hash);
-    fprintf(jed_file, "      </info>\n");
-  }
-
-  fprintf(jed_file, "    </event>\n");
-}
-
-static void print_events(xbt_dynar_t event_list)  {
-  unsigned int i;
-  jed_event_t event;
-
-  fprintf(jed_file, "  <events>\n");
-  xbt_dynar_foreach(event_list, i, event) {
-    print_event(event);
-  }
-  fprintf(jed_file, "  </events>\n");
-}
-
-void write_jedule_output(FILE *file, jedule_t jedule, xbt_dynar_t event_list, xbt_dict_t meta_info_dict) {
-
-  jed_file = file;
+void write_jedule_output(FILE *file, jedule_t jedule, xbt_dynar_t event_list) {
   if (!xbt_dynar_is_empty(jedule_event_list)){
 
-    fprintf(jed_file, "<jedule>\n");
+    fprintf(file, "<jedule>\n");
 
-    if (!xbt_dict_is_empty(jedule->jedule_meta_info)){
-      fprintf(jed_file, "  <jedule_meta>\n");
-      print_key_value_dict(jedule->jedule_meta_info);
-      fprintf(jed_file, "  </jedule_meta>\n");
+    if (!jedule->jedule_meta_info.empty()){
+      fprintf(file, "  <jedule_meta>\n");
+      for (auto elm: jedule->jedule_meta_info)
+        fprintf(file, "        <prop key=\"%s\" value=\"%s\" />\n",elm.first,elm.second);
+      fprintf(file, "  </jedule_meta>\n");
     }
 
-    print_platform(jedule->root_container);
+    fprintf(file, "  <platform>\n");
+    jedule->root_container->print(file);
+    fprintf(file, "  </platform>\n");
 
-    print_events(event_list);
+    fprintf(file, "  <events>\n");
+    unsigned int i;
+    jed_event_t event;
+    xbt_dynar_foreach(event_list, i, event) {
+        event->print(file);
+    }
+    fprintf(file, "  </events>\n");
 
-    fprintf(jed_file, "</jedule>\n");
+    fprintf(file, "</jedule>\n");
   }
 }
 
-static void jed_event_free_ref(void *evp)
-{
-  jed_event_t ev = *(jed_event_t *)evp;
-  jed_event_free(ev);
-}
-
 void jedule_init_output() {
-  jedule_event_list = xbt_dynar_new(sizeof(jed_event_t), jed_event_free_ref);
+  jedule_event_list = xbt_dynar_new(sizeof(jed_event_t), nullptr);
 }
 
 void jedule_cleanup_output() {
-  xbt_dynar_free(&jedule_event_list);
+  while (!xbt_dynar_is_empty(jedule_event_list)) {
+    jed_event_t evt = xbt_dynar_pop_as(jedule_event_list, jed_event_t) ;
+    evt->deleteEvent();
+  }
+
+  xbt_dynar_free_container(&jedule_event_list);
 }
 
 void jedule_store_event(jed_event_t event) {
index dfa9129..d04c00f 100644 (file)
 /* 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_platform.h"
+#include "simgrid/jedule/jedule_platform.hpp"
+#include "simgrid/jedule/jedule_output.hpp"
+#include "simgrid/s4u/As.hpp"
+#include "simgrid/host.h"
 
 #include "xbt/asserts.h"
 #include "xbt/dynar.h"
 #include "xbt/str.h"
+#include <string>
 
 #include <stdlib.h>
-#include <string.h>
+#include <stdio.h>
 
 #if HAVE_JEDULE
 
 static xbt_dict_t host2_simgrid_parent_container;
 static xbt_dict_t container_name2container;
 
-static int compare_ids(const void *num1, const void *num2) {
-  return *((int*) num1) - *((int*) num2);
+namespace simgrid {
+namespace jedule {
+
+Container::Container(std::string name)
+: name(name) {
+
+  this->is_lowest = 0;
+  this->parent = nullptr;
+
+  xbt_dict_set(container_name2container, this->name.c_str(), this, nullptr);
+}
+
+void Container::addChild(jed_container_t child){
+  xbt_assert(this != nullptr);
+  xbt_assert(child != nullptr);
+  this->children.push_back(child);
+  child->parent = this;
 }
 
-static void jed_free_container(jed_simgrid_container_t container) {
-  xbt_dict_free(&container->name2id);
-  xbt_dynar_free(&container->resource_list);
+void Container::addResources(std::vector<sg_host_t> hosts){
+  this->is_lowest = 1;
+  this->children.clear();
+  this->last_id = 0;
+
+  //FIXME do we need to sort?: xbt_dynar_sort_strings(host_names);
+
+  for (auto host : hosts) {
+    const char *host_name = sg_host_get_name(host);
+    this->name2id.insert({host_name, this->last_id});
+    (this->last_id)++;
+    xbt_dict_set(host2_simgrid_parent_container, host_name, this, nullptr);
+    this->resource_list.push_back(host);
+  }
+}
+
+void Container::createHierarchy(AS_t from_as){
+  xbt_dict_cursor_t cursor = nullptr;
+  char *key;
+  AS_t elem;
+  xbt_dict_t routing_sons = from_as->children();
+
+  if (xbt_dict_is_empty(routing_sons)) {
+    // I am no AS
+    // add hosts to jedule platform
+    xbt_dynar_t table = from_as->hosts();
+    unsigned int dynar_cursor;
+    sg_host_t host;
+
+    std::vector<sg_host_t> hosts;
 
-  if( container->container_children != nullptr ) {
-    unsigned int iter;
-    jed_simgrid_container_t child_container;
-    xbt_dynar_foreach(container->container_children, iter, child_container) {
-      jed_free_container(child_container);
+    xbt_dynar_foreach(table, dynar_cursor, host) {
+      hosts.push_back(host);
+    }
+    this->addResources(hosts);
+    xbt_dynar_free(&table);
+  } else {
+    xbt_dict_foreach(routing_sons, cursor, key, elem) {
+      jed_container_t child_container = new simgrid::jedule::Container(std::string(elem->name()));
+      this->addChild(child_container);
+      child_container->createHierarchy(elem);
     }
-    xbt_dynar_free(&container->container_children);
   }
-  xbt_free(container->name);
-  xbt_free(container);
 }
 
-void jed_simgrid_create_container(jed_simgrid_container_t *container, const char *name)
-{
-  xbt_assert( name != nullptr );
+std::vector<int> Container::getHierarchy() {
+  xbt_assert( this!= nullptr );
+
+  if(this->parent != nullptr ) {
 
-  *container = xbt_new0(s_jed_simgrid_container_t,1);
-  (*container)->name = xbt_strdup(name);
-  (*container)->is_lowest = 0;
-  (*container)->container_children = xbt_dynar_new(sizeof(jed_simgrid_container_t), nullptr);
-  (*container)->parent = nullptr;
+    if(!this->parent->children.empty()) {
+      // we are in the last level
+      return this->parent->getHierarchy();
+    } else {
+      unsigned int i =0;
+      int child_nb = -1;
+
+      for (auto child : this->parent->children) {
+        if( child == this) {
+          child_nb = i;
+          break;
+        }
+        i++;
+      }
 
-  xbt_dict_set(container_name2container, (*container)->name, *container, nullptr);
+      xbt_assert( child_nb > - 1);
+      std::vector<int> heir_list = this->parent->getHierarchy();
+      heir_list.insert(heir_list.begin(), child_nb);
+      return heir_list;
+    }
+  } else {
+    int top_level = 0;
+    std::vector<int> heir_list = {top_level};
+    return heir_list;
+  }
 }
 
-void jed_simgrid_add_container(jed_simgrid_container_t parent, jed_simgrid_container_t child) {
-  xbt_assert(parent != nullptr);
-  xbt_assert(child != nullptr);
-  xbt_dynar_push(parent->container_children, &child);
-  child->parent = parent;
+std::string Container::getHierarchyAsString(){
+  std::string output("");
+
+  std::vector<int> heir_list = this->getHierarchy();
+
+  unsigned int length = heir_list.size();
+  unsigned int i = 0;
+  for (auto id : heir_list) {
+    output += std::to_string(id);
+    if( i != length-1 ) {
+      output += ".";
+    }
+  }
+
+  return output;
 }
 
-void jed_simgrid_add_resources(jed_simgrid_container_t parent, xbt_dynar_t host_names) {
-  unsigned int iter;
-  char *host_name;
-  char *buf;
-
-  parent->is_lowest = 1;
-  xbt_dynar_free(&parent->container_children);
-  parent->container_children = nullptr;
-  parent->name2id = xbt_dict_new_homogeneous(xbt_free_f);
-  parent->last_id = 0;
-  parent->resource_list = xbt_dynar_new(sizeof(char *), nullptr);
-
-  xbt_dynar_sort_strings(host_names);
-
-  xbt_dynar_foreach(host_names, iter, host_name) {
-    buf = bprintf("%d", parent->last_id);
-    (parent->last_id)++;
-    xbt_dict_set(parent->name2id, host_name, buf, nullptr);
-    xbt_dict_set(host2_simgrid_parent_container, host_name, parent, nullptr);
-    xbt_dynar_push(parent->resource_list, &host_name);
+void Container::printResources(FILE * jed_file){
+  unsigned int res_nb;
+  unsigned int i=0;
+  xbt_assert(!this->resource_list.empty());
+
+  res_nb = this->resource_list.size();
+
+  std::string resid = this->getHierarchyAsString();
+
+  fprintf(jed_file, "      <rset id=\"%s\" nb=\"%u\" names=\"", resid.c_str(), res_nb);
+  for (auto res: this->resource_list) {
+    const char * res_name = sg_host_get_name(res);
+    fprintf(jed_file, "%s", res_name);
+    if( i != res_nb-1 ) {
+      fprintf(jed_file, "|");
+    }
+    i++;
+  }
+  fprintf(jed_file, "\" />\n");
+}
+
+void Container::print(FILE* jed_file) {
+  xbt_assert( this != nullptr );
+  fprintf(jed_file, "    <res name=\"%s\">\n", this->name.c_str());
+  if( !this->children.empty()){
+    for (auto child: this->children) {
+      child->print(jed_file);
+    }
+  } else {
+    this->printResources(jed_file);
   }
+  fprintf(jed_file, "    </res>\n");
+}
+
+}
+}
+
+static int compare_ids(const void *num1, const void *num2) {
+  return *((int*) num1) - *((int*) num2);
 }
 
-static void add_subset_to(xbt_dynar_t subset_list, int start, int end, jed_simgrid_container_t parent) {
+static void jed_free_container(jed_container_t container) {
+  if(!container->children.empty()) {
+    for (auto child: container->children){
+      jed_free_container(child);
+    }
+  }
+  delete container;
+}
+
+static void add_subset_to(xbt_dynar_t subset_list, int start, int end, jed_container_t parent) {
   jed_res_subset_t subset;
 
   xbt_assert( subset_list != nullptr );
@@ -95,13 +199,10 @@ static void add_subset_to(xbt_dynar_t subset_list, int start, int end, jed_simgr
   xbt_dynar_push(subset_list, &subset);
 }
 
-static void add_subsets_to(xbt_dynar_t subset_list, xbt_dynar_t hostgroup, jed_simgrid_container_t parent) {
+static void add_subsets_to(xbt_dynar_t subset_list, xbt_dynar_t hostgroup, jed_container_t parent) {
   unsigned int iter;
   char *host_name;
-  xbt_dynar_t id_list;
-  int *id_ar;
-  int nb_ids;
-  char *id_str;
+  int id;
 
   // get ids for each host
   // sort ids
@@ -113,31 +214,25 @@ static void add_subsets_to(xbt_dynar_t subset_list, xbt_dynar_t hostgroup, jed_s
   xbt_assert( hostgroup != nullptr );
   xbt_assert( parent != nullptr );
 
-  id_list = xbt_dynar_new(sizeof(char *), nullptr);
+  xbt_dynar_t id_list = xbt_dynar_new(sizeof(int), nullptr);
 
   xbt_dynar_foreach(hostgroup, iter, host_name) {
-    jed_simgrid_container_t parent;
+    jed_container_t parent;
     xbt_assert( host_name != nullptr );
-    parent = (jed_simgrid_container_t)xbt_dict_get(host2_simgrid_parent_container, host_name);
-    id_str = (char*)xbt_dict_get(parent->name2id, host_name);
-    xbt_dynar_push(id_list, &id_str);
+    parent = (jed_container_t)xbt_dict_get(host2_simgrid_parent_container, host_name);
+    id = parent->name2id.at(host_name);
+    xbt_dynar_push(id_list, &id);
   }
+  int nb_ids = xbt_dynar_length(id_list);
+  xbt_dynar_sort(id_list, &compare_ids);
 
-  nb_ids = xbt_dynar_length(id_list);
-  id_ar = xbt_new0(int,nb_ids);
-  xbt_dynar_foreach(id_list, iter, id_str) {
-    id_ar[iter] = xbt_str_parse_int(id_str, "Parse error: not a number: %s");
-  }
-
-  qsort (id_ar, nb_ids, sizeof(int), &compare_ids);
+  int *id_ar = static_cast<int*>(xbt_dynar_to_array(id_list));
 
   if( nb_ids > 0 ) {
     int start = 0;
-    int pos;
-    int i;
 
-    pos = start;
-    for(i=0; i<nb_ids; i++) {
+    int pos = start;
+    for(int i=0; i<nb_ids; i++) {
       if( id_ar[i] - id_ar[pos] > 1 ) {
         add_subset_to( subset_list, id_ar[start], id_ar[pos], parent );
         start = i;
@@ -150,76 +245,60 @@ static void add_subsets_to(xbt_dynar_t subset_list, xbt_dynar_t hostgroup, jed_s
           add_subset_to( subset_list, id_ar[start], id_ar[i], parent );
         }
       }
-
       pos = i;
     }
   }
 
-  free(id_ar);
-  xbt_dynar_free(&id_list);
+  xbt_free(id_ar);
 }
 
-void jed_simgrid_get_resource_selection_by_hosts(xbt_dynar_t subset_list, xbt_dynar_t host_names) {
-  char *host_name;
-  unsigned int iter;
-  xbt_dict_t parent2hostgroup;  // group hosts by parent
+void jed_simgrid_get_resource_selection_by_hosts(xbt_dynar_t subset_list, std::vector<sg_host_t> *host_list) {
+  std::unordered_map<const char*, xbt_dynar_t> parent2hostgroup;  // group hosts by parent
 
-  parent2hostgroup = xbt_dict_new_homogeneous(nullptr);
-
-  xbt_assert( host_names != nullptr );
+  xbt_assert( host_list != nullptr );
 
   // for each host name
   //  find parent container
   //  group by parent container
 
-  xbt_dynar_foreach(host_names, iter, host_name) {
-    jed_simgrid_container_t parent = (jed_simgrid_container_t)xbt_dict_get(host2_simgrid_parent_container, host_name);
+  for (auto host: *host_list) {
+    const char *host_name = sg_host_get_name(host);
+    jed_container_t parent = (jed_container_t)xbt_dict_get(host2_simgrid_parent_container, host_name);
     xbt_assert( parent != nullptr );
 
-    xbt_dynar_t hostgroup = (xbt_dynar_t)xbt_dict_get_or_null (parent2hostgroup, parent->name);
-    if( hostgroup == nullptr ) {
-      hostgroup = xbt_dynar_new(sizeof(char*), nullptr);
-      xbt_dict_set(parent2hostgroup, parent->name, hostgroup, nullptr);
+    auto host_group = parent2hostgroup.find(parent->name.c_str());
+    if (host_group == parent2hostgroup.end()){
+      xbt_dynar_t group = xbt_dynar_new(sizeof(char*), nullptr);
+      xbt_dynar_push(group, &host_name);
+      parent2hostgroup.insert({parent->name.c_str(), group});
+    } else {
+      xbt_dynar_push(host_group->second, &host_name);
     }
-
-    xbt_dynar_push(hostgroup, &host_name);
   }
 
-  xbt_dict_cursor_t cursor=nullptr;
-  char *parent_name;
-  xbt_dynar_t hostgroup;
-  jed_simgrid_container_t parent;
-
-  xbt_dict_foreach(parent2hostgroup,cursor,parent_name,hostgroup) {
-    parent = (jed_simgrid_container_t)xbt_dict_get(container_name2container, parent_name);
-    add_subsets_to(subset_list, hostgroup, parent);
+  for (auto elm: parent2hostgroup) {
+    jed_container_t parent = (jed_container_t)xbt_dict_get(container_name2container, elm.first);
+    add_subsets_to(subset_list, elm.second, parent);
+    xbt_dynar_free_container(&elm.second);
   }
-  xbt_dynar_free(&hostgroup);
-
-  xbt_dict_free(&parent2hostgroup);
 }
 
 void jedule_add_meta_info(jedule_t jedule, char *key, char *value) {
-  char *val_cp;
-
   xbt_assert(key != nullptr);
   xbt_assert(value != nullptr);
 
-  val_cp = xbt_strdup(value);
-  xbt_dict_set(jedule->jedule_meta_info, key, val_cp, nullptr);
+  jedule->jedule_meta_info.insert({key, value});
 }
 
 void jed_create_jedule(jedule_t *jedule) {
   *jedule = xbt_new0(s_jedule_t,1);
   host2_simgrid_parent_container = xbt_dict_new_homogeneous(nullptr);
   container_name2container       = xbt_dict_new_homogeneous(nullptr);
-  (*jedule)->jedule_meta_info    = xbt_dict_new_homogeneous(nullptr);
 }
 
 void jed_free_jedule(jedule_t jedule) {
   jed_free_container(jedule->root_container);
 
-  xbt_dict_free(&jedule->jedule_meta_info);
   xbt_free(jedule);
 
   xbt_dict_free(&host2_simgrid_parent_container);
index 31ba789..58766b5 100644 (file)
 #include "surf/surf.h"
 
 #include "simgrid/jedule/jedule_sd_binding.h"
-#include "simgrid/jedule/jedule_events.h"
-#include "simgrid/jedule/jedule_platform.h"
-#include "simgrid/jedule/jedule_output.h"
-
 #include "simgrid/simdag.h"
 #include "simgrid/s4u/As.hpp"
 #include "simgrid/s4u/engine.hpp"
 
 #include <stdio.h>
+#include "simgrid/forward.h"
+
+#include "simgrid/jedule/jedule_events.hpp"
+#include "simgrid/jedule/jedule_output.hpp"
+#include "simgrid/jedule/jedule_platform.hpp"
 #include "../../simdag/simdag_private.hpp"
 
 #if HAVE_JEDULE
 XBT_LOG_NEW_CATEGORY(jedule, "Logging specific to Jedule");
 XBT_LOG_NEW_DEFAULT_SUBCATEGORY(jed_sd, jedule, "Logging specific to Jedule SD binding");
 
-jedule_t jedule;
+jedule_t my_jedule;
 
 void jedule_log_sd_event(SD_task_t task)
 {
-  jed_event_t event;
-
   xbt_assert(task != nullptr);
 
-  xbt_dynar_t host_list = xbt_dynar_new(sizeof(char*), nullptr);
-
-  for(auto host: *task->allocation){
-    const char *hostname = sg_host_get_name(host);
-    xbt_dynar_push(host_list, &hostname);
-  }
-
-  create_jed_event(&event, (char*)SD_task_get_name(task), task->start_time, task->finish_time,"SD");
-
-  jed_event_add_resources(event, host_list);
+  jed_event_t event =
+      new simgrid::jedule::Event(std::string(SD_task_get_name(task)), task->start_time, task->finish_time,"SD");
+  event->addResources(task->allocation);
   jedule_store_event(event);
-
-  xbt_dynar_free(&host_list);
-}
-
-static void create_hierarchy(AS_t current_comp, jed_simgrid_container_t current_container)
-{
-  xbt_dict_cursor_t cursor = nullptr;
-  char *key;
-  AS_t elem;
-  xbt_dict_t routing_sons = current_comp->children();
-
-  if (xbt_dict_is_empty(routing_sons)) {
-    // I am no AS
-    // add hosts to jedule platform
-    xbt_dynar_t table = current_comp->hosts();
-    xbt_dynar_t hosts;
-    unsigned int dynar_cursor;
-    sg_host_t host_elem;
-
-    hosts = xbt_dynar_new(sizeof(char*), nullptr);
-
-    xbt_dynar_foreach(table, dynar_cursor, host_elem) {
-      xbt_dynar_push_as(hosts, const char*, sg_host_get_name(host_elem));
-    }
-
-    jed_simgrid_add_resources(current_container, hosts);
-    xbt_dynar_free(&hosts);
-    xbt_dynar_free(&table);
-  } else {
-    xbt_dict_foreach(routing_sons, cursor, key, elem) {
-      jed_simgrid_container_t child_container;
-      jed_simgrid_create_container(&child_container, elem->name());
-      jed_simgrid_add_container(current_container, child_container);
-      XBT_DEBUG("name : %s\n", elem->name());
-      create_hierarchy(elem, child_container);
-    }
-  }
 }
 
 void jedule_setup_platform()
 {
-  jed_create_jedule(&jedule);
+  jed_create_jedule(&my_jedule);
 
   AS_t root_comp = simgrid::s4u::Engine::instance()->rootAs();
   XBT_DEBUG("root name %s\n", root_comp->name());
 
-  jed_simgrid_container_t root_container;
-  jed_simgrid_create_container(&root_container, root_comp->name());
-  jedule->root_container = root_container;
+  jed_container_t root_container = new simgrid::jedule::Container(std::string(root_comp->name()));
+  my_jedule->root_container = root_container;
 
-  create_hierarchy(root_comp, root_container);
+  root_container->createHierarchy(root_comp);
 }
 
 void jedule_sd_cleanup()
@@ -111,29 +65,28 @@ void jedule_sd_init()
 
 void jedule_sd_exit(void)
 {
-  if (jedule) {
-    jed_free_jedule(jedule);
-    jedule = nullptr;
+  if (my_jedule) {
+    jed_free_jedule(my_jedule);
+    my_jedule = nullptr;
   }
 }
 
 void jedule_sd_dump(const char * filename)
 {
-  if (jedule) {
+  if (my_jedule) {
     char *fname;
-    FILE *fh;
     if (!filename) {
       fname = bprintf("%s.jed", xbt_binary_name);
     } else {
       fname = xbt_strdup(filename);
     }
 
-    fh = fopen(fname, "w");
+    FILE *fh = fopen(fname, "w");
 
-    write_jedule_output(fh, jedule, jedule_event_list, nullptr);
+    write_jedule_output(fh, my_jedule, jedule_event_list);
 
     fclose(fh);
-    free(fname);
+    xbt_free(fname);
   }
 }
 #endif
index ac574f2..1829975 100644 (file)
@@ -47,30 +47,30 @@ simgrid::xbt::signal<void(void)> surfExitCallbacks;
 #include <simgrid/plugins/energy.h> // FIXME: this plugin should not be linked to the core
 
 s_surf_model_description_t surf_plugin_description[] = {
-    {"Energy", "Cpu energy consumption.", sg_energy_plugin_init},
+    {"Energy", "Cpu energy consumption.", &sg_energy_plugin_init},
      {nullptr, nullptr,  nullptr}      /* this array must be nullptr terminated */
 };
 
 /* Don't forget to update the option description in smx_config when you change this */
 s_surf_model_description_t surf_network_model_description[] = {
   {"LV08", "Realistic network analytic model (slow-start modeled by multiplying latency by 10.4, bandwidth by .92; bottleneck sharing uses a payload of S=8775 for evaluating RTT). ",
-   surf_network_model_init_LegrandVelho},
+   &surf_network_model_init_LegrandVelho},
   {"Constant",
    "Simplistic network model where all communication take a constant time (one second). This model provides the lowest realism, but is (marginally) faster.",
-   surf_network_model_init_Constant},
+   &surf_network_model_init_Constant},
   {"SMPI", "Realistic network model specifically tailored for HPC settings (accurate modeling of slow start with correction factors on three intervals: < 1KiB, < 64 KiB, >= 64 KiB)",
-   surf_network_model_init_SMPI},
+   &surf_network_model_init_SMPI},
   {"IB", "Realistic network model specifically tailored for HPC settings, with Infiniband contention model",
-   surf_network_model_init_IB},
+   &surf_network_model_init_IB},
   {"CM02", "Legacy network analytic model (Very similar to LV08, but without corrective factors. The timings of small messages are thus poorly modeled).",
-   surf_network_model_init_CM02},
-  {"NS3", "Network pseudo-model using the NS3 tcp model instead of an analytic model", surf_network_model_init_NS3},
+   &surf_network_model_init_CM02},
+  {"NS3", "Network pseudo-model using the NS3 tcp model instead of an analytic model", &surf_network_model_init_NS3},
   {"Reno",  "Model from Steven H. Low using lagrange_solve instead of lmm_solve (experts only; check the code for more info).",
-   surf_network_model_init_Reno},
+   &surf_network_model_init_Reno},
   {"Reno2", "Model from Steven H. Low using lagrange_solve instead of lmm_solve (experts only; check the code for more info).",
-   surf_network_model_init_Reno2},
+   &surf_network_model_init_Reno2},
   {"Vegas", "Model from Steven H. Low using lagrange_solve instead of lmm_solve (experts only; check the code for more info).",
-   surf_network_model_init_Vegas},
+   &surf_network_model_init_Vegas},
   {nullptr, nullptr, nullptr}      /* this array must be nullptr terminated */
 };
 
@@ -89,19 +89,19 @@ void surf_network_model_init_NS3() {
 #endif
 
 s_surf_model_description_t surf_cpu_model_description[] = {
-  {"Cas01", "Simplistic CPU model (time=size/power).", surf_cpu_model_init_Cas01},
+  {"Cas01", "Simplistic CPU model (time=size/power).", &surf_cpu_model_init_Cas01},
   {nullptr, nullptr,  nullptr}      /* this array must be nullptr terminated */
 };
 
 s_surf_model_description_t surf_host_model_description[] = {
-  {"default",   "Default host model. Currently, CPU:Cas01 and network:LV08 (with cross traffic enabled)", surf_host_model_init_current_default},
-  {"compound",  "Host model that is automatically chosen if you change the network and CPU models", surf_host_model_init_compound},
-  {"ptask_L07", "Host model somehow similar to Cas01+CM02 but allowing parallel tasks", surf_host_model_init_ptask_L07},
+  {"default",   "Default host model. Currently, CPU:Cas01 and network:LV08 (with cross traffic enabled)", &surf_host_model_init_current_default},
+  {"compound",  "Host model that is automatically chosen if you change the network and CPU models", &surf_host_model_init_compound},
+  {"ptask_L07", "Host model somehow similar to Cas01+CM02 but allowing parallel tasks", &surf_host_model_init_ptask_L07},
   {nullptr, nullptr, nullptr}      /* this array must be nullptr terminated */
 };
 
 s_surf_model_description_t surf_vm_model_description[] = {
-  {"default", "Default vm model.", surf_vm_model_init_HL13},
+  {"default", "Default vm model.", &surf_vm_model_init_HL13},
   {nullptr, nullptr, nullptr}      /* this array must be nullptr terminated */
 };
 
@@ -113,7 +113,7 @@ s_surf_model_description_t surf_optimization_mode_description[] = {
 };
 
 s_surf_model_description_t surf_storage_model_description[] = {
-  {"default", "Simplistic storage model.", surf_storage_model_init_default},
+  {"default", "Simplistic storage model.", &surf_storage_model_init_default},
   {nullptr, nullptr,  nullptr}      /* this array must be nullptr terminated */
 };
 
index ff7d97a..a6c6363 100644 (file)
@@ -524,9 +524,9 @@ set(TRACING_SRC
   )
 
 set(JEDULE_SRC
-  include/simgrid/jedule/jedule_events.h
-  include/simgrid/jedule/jedule_output.h
-  include/simgrid/jedule/jedule_platform.h
+  include/simgrid/jedule/jedule_events.hpp
+  include/simgrid/jedule/jedule_output.hpp
+  include/simgrid/jedule/jedule_platform.hpp
   include/simgrid/jedule/jedule_sd_binding.h
   src/instr/jedule/jedule_events.cpp
   src/instr/jedule/jedule_output.cpp
index f533ea4..4badb64 100644 (file)
@@ -7,10 +7,7 @@ IF(enable_smpi AND NOT WIN32)
 ENDIF()
 
 SET(TESH_OPTION "--ignore-jenkins")
-SET(TESH_COMMAND ${CMAKE_BINARY_DIR}/bin/tesh)
-IF(CMAKE_HOST_WIN32)
-  SET(TESH_OPTION ${TESH_OPTION} --timeout 50)
-ENDIF()
+SET(TESH_COMMAND "${PYTHON_EXECUTABLE}" ${CMAKE_BINARY_DIR}/bin/tesh)
 
 IF(enable_memcheck)
   INCLUDE(FindValgrind)
index beb475c..0e871aa 100644 (file)
@@ -70,8 +70,8 @@ p This tests whether TESH correctly sorts command output
 < > b
 < > c
 < > d
-$ ${bindir:=.}/tesh --enable-coverage
-> Enable coverage
+$ ${bindir:=.}/tesh --ignore-jenkins
+> Ignore all cruft seen on SimGrid's continous integration servers
 > Test suite from stdin
 > [(stdin):1] Test sorting and filtering of output
 > [(stdin):3] true
index f5d32b8..0beb5af 100755 (executable)
@@ -288,7 +288,9 @@ class Cmd(object):
         if TeshState().wrapper is not None:
             self.timeout *= 20
             self.args = TeshState().wrapper + self.args
-            
+        elif re.match(".*smpirun.*", self.args) is not None:
+            self.args = "sh " + self.args 
+
         self.args += TeshState().args_suffix
         
         print("["+FileReader().filename+":"+str(self.linenumber)+"] "+self.args)