// Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.

part of yaml;

/// The visitor pattern for YAML documents.
class _Visitor {
  /// Returns [alias].
  visitAlias(_AliasNode alias) => alias;

  /// Returns [scalar].
  visitScalar(_ScalarNode scalar) => scalar;

  /// Visits each node in [seq] and returns a list of the results.
  visitSequence(_SequenceNode seq)
      => seq.content.mappedBy((e) => e.visit(this)).toList();

  /// Visits each key and value in [map] and returns a map of the results.
  visitMapping(_MappingNode map) {
    var out = new YamlMap();
    for (var key in map.content.keys) {
      out[key.visit(this)] = map.content[key].visit(this);
    }
    return out;
  }
}
