//===-- AST Yaml Reader Interface -------------------------------*- C++ -*-===//
//
// Copyright (C) 2006 Reid Spencer. All Rights Reserved.
//
// This program is open source software; you can redistribute it and/or modify
// it under the terms of the GNU General Public License (GPL) as published by
// the Free Software Foundation; either version 2 of the License, or (at your
// option) any later version. You should have received a copy of the GPL in a
// file named COPYING that was included with this program; if not, you can
// obtain a copy of the license through the Internet at http://www.fsf.org/
//
// This program is distributed in the hope that it will be useful, but
// WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
// or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
// for more details.
//
////////////////////////////////////////////////////////////////////////////////
/// @file hlvm/Reader/YamlReader.h
/// @author Reid Spencer <rspencer@reidspencer.com> (original author)
/// @date 2006/05/04
/// @since 0.1.0
/// @brief Declares the class hlvm::YamlReader.h
////////////////////////////////////////////////////////////////////////////////

#ifndef HLVM_YAML_READER_YAMLREADER_H
#define HLVM_YAML_READER_YAMLREADER_H

#include <llvm/System/Path.h>

namespace hlvm {

  /// This class provides an interface to reading HLVM's AST via a Yaml
  /// document.
  /// @brief Interface to Reading Yaml AST documents.
  class YamlReader
  {
    /// @name Constructors
    /// @{
    public:
      /// The constructor static method to create a YamlReader. This creates
      /// the correct sublcass of YamlReader which is an implementation detail.
      static YamlReader* create();
    protected:
      YamlReader() {}

    /// @}
    /// @name Accessors
    /// @{
    public:

    /// @}
    /// @name Mutators
    /// @{
    public:
      void parse(const llvm::sys::Path& path);

    /// @}
    /// @name Data
    /// @{
    protected:
    /// @}
  };

} // hlvm
#endif
