43         if (!transform.isObject()) {
 
   48         while (currentPtr->isObject() &&
 
   49                currentPtr->isMember(routing_keys::child())) {
 
   50             auto const ¤t = *currentPtr;
 
   51             pushLevelBack(current);
 
   52             currentPtr = &(current[routing_keys::child()]);
 
   57         Json::Value newLayer{transform};
 
   58         if (newLayer.isObject()) {
 
   59             container().insert(begin(), newLayer);
 
   68         return recompose(leaf.empty() ? Json::nullValue : Json::Value(leaf));
 
   71     void GeneralizedTransform::pushLevelBack(Json::Value level) {
 
   72         if (level.isMember(routing_keys::child())) {
 
   73             level.removeMember(routing_keys::child());
 
   75         container().emplace_back(std::move(level));
 
   78         template <
typename Container> 
class ReverseFacade {
 
   80             ReverseFacade(Container 
const &c) : m_container(c) {}
 
   82             ReverseFacade &operator=(ReverseFacade 
const &) = 
delete;
 
   84             using const_iterator = 
typename Container::const_reverse_iterator;
 
   85             const_iterator begin()
 const { 
return m_container.rbegin(); }
 
   86             const_iterator end()
 const { 
return m_container.rend(); }
 
   89             Container 
const &m_container;
 
   91         template <
typename Container>
 
   92         inline ReverseFacade<Container> reverse(Container 
const &c) {
 
   93             return ReverseFacade<Container>(c);
 
   96     Json::Value GeneralizedTransform::recompose(Json::Value leaf)
 const {
 
   97         if (container().
empty()) {
 
  100         Json::Value state{leaf};
 
  101         for (
auto const &level : reverse(container())) {
 
  102             Json::Value nextLevel{level};
 
  103             if (!state.isNull()) {
 
  104                 nextLevel[routing_keys::child()] = state;
 
  106             state = std::move(nextLevel);
 
t_< detail::transform_< List, Fun >> transform