From b1bbe92da37dd44df458ffa122e052612bb9eff3 Mon Sep 17 00:00:00 2001 From: "Kartik K. Agaram" Date: Tue, 17 Mar 2015 08:42:38 -0700 Subject: 945 - move 'transform' layer to before 'run' --- cpp/012transform | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) create mode 100644 cpp/012transform (limited to 'cpp/012transform') diff --git a/cpp/012transform b/cpp/012transform new file mode 100644 index 00000000..bb130187 --- /dev/null +++ b/cpp/012transform @@ -0,0 +1,28 @@ +//: Once a set of recipes is loaded, it can be filtered through an extensible +//: list of 'transforms'. +//: +//: The hope is that this framework of transform tools will provide a +//: deconstructed alternative to conventional compilers. + +:(before "End Recipe Fields") +size_t transformed_until; + recipe() :transformed_until(-1) {} + +:(before "End Types") +typedef void (*transform_fn)(recipe_number); + +:(before "End Globals") +vector Transform; + +:(code) +void transform_all() { + for (size_t t = 0; t < Transform.size(); ++t) { + for (unordered_map::iterator p = Recipe.begin(); p != Recipe.end(); ++p) { + recipe& r = p->second; + if (r.steps.empty()) continue; + if (r.transformed_until != t-1) continue; + (*Transform[t])(/*recipe_number*/p->first); + r.transformed_until = t; + } + } +} -- cgit 1.4.1-2-gfad0