aboutsummaryrefslogtreecommitdiff
path: root/src/function/detail/apply.h
AgeCommit message (Collapse)Author
2015-03-07Changed `tav::Apply` implementation selection to template aliasAdrian Kummerlaender
* there is no reason to differ from the rest of the library and use inheritance in this instance * added link to blog article on the _Scheme metaphor_ to `README.md`
2015-02-24Replaced `utility::defer_eval` with placeholder-less `Apply`Adrian Kummerlaender
* usage of `Apply` sans placeholders was already possible and as such duplicated `utility::defer_eval` * renamed `apply_none`'s type alias from to `type` to enable combining it with `Eval`
2015-02-19Moved `Apply`'s placeholder into separate detail headerAdrian Kummerlaender
* separate actual `Apply` specializations in `detail/apply.h` from placeholder details
2015-02-16Unified `Iota` and `MakeList` using nested structure generatorAdrian Kummerlaender
* `detail::generate_nested_structure` offers a higher order nested structure constructor for procedural list generation * renamed `Fold` implementation details
2015-02-16Simplified `List`, `Length` and `Reverse` implementationsAdrian Kummerlaender
* continuation of 8e49cc6 * list constructor was generalized to a _variadic fold_
2015-02-15Moved class-based implementations into `detail` namespaceAdrian Kummerlaender
* while class templates enable e.g. hiding implementation details they also require evaluation via `Eval` ** this clutters up the actual logic and is now hidden behind aliae that perform the evaluation
2015-02-14Introduced `Eval` function evaluation helperAdrian Kummerlaender
* replaces `typename *::type` constructs with `Eval` applications * aims to further unify function evaluation
2015-02-13Renamed `Apply`'s template alias to `function`Adrian Kummerlaender
* `type` is used to represent evaluation of a template * accessing the `function` doesn't evaluate it as it is the template itself
2015-02-12Implemented `Cond` conditionalAdrian Kummerlaender
* returns the `CDR` of the first true `CAR` in a given list of pairs * reimplemented `Apply` base class selection in terms of `Cond`
2015-02-12Revamped partial function applicationAdrian Kummerlaender
* moved internals into separate header i.e. the `detail` namespace relating to `Apply` * implemented automatic alias selection by implementing aliae of the basic variadic `type` template alias in different base classes ** variadic partial application is implemented in `detail::apply_variadic` *** `detail::apply_single` and `detail::apply_pair` define aliae to `detail::apply_variadic`'s `type` template alias *** both restricted aliae derive from `detail::apply_variadic` ** `Apply` derives from any of the aliae defining base classes depending on the count of placeholders as determined by `detail::count_placeholders` *** `Apply` is guaranteed to always be derived from `detail::apply_variadic` one way or the other * changed functions, test cases and examples depending on `Apply` accordingly ** `Length` had to be reimplemented without `Apply` as it doesn't allow usage of aliae expecting a different count of arguments anymore *** this is a advantage in the sense that core functionality of _TypeAsValue_ now doesn't depend on this complex partial application implementation anymore *** such functionality may be reimplemented separately from `Apply` * removed unnecessary `tav` namespace prefixes