/*
 * This Source Code Form is subject to the terms of the Mozilla Public
 * License, v. 2.0. If a copy of the MPL was not distributed with this
 * file, You can obtain one at http://mozilla.org/MPL/2.0/.
 *
 * File:   polymorph.h
 * Author: pgess <v.melnychenko@xreate.org>
 *
 * Created on November 9, 2017, 12:14 PM
 */

/**
 * \file    query/polymorph.h
 * \brief   Transcend solution on [Polymorphism](/d/concepts/polymorphism/) implementation details
 */

#ifndef POLYMORPHQUERY_H
#define POLYMORPHQUERY_H

#include "transcendlayer.h"
#include "aux/latereasoning.h"
#include <unordered_map>

namespace xreate { namespace polymorph {

/** \brief Queries Transcend solution on [Polymorphism](/d/concepts/polymorphism/) implementation details */
class PolymorphQuery: public IQuery {
public:
  std::pair<Gringo::Symbol, ExpandedType> getFnSupply(const ASTSite& siteCall);

public:
  virtual void init(TranscendLayer* transcend) override;

private:
  std::map<ASTSite, std::pair<Gringo::Symbol, ExpandedType>> __modelEarlyReasoning;
};

}}//end of xreate::polymorph

#endif /* POLYMORPHQUERY_H */

