/* Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
   file Copyright.txt or https://cmake.org/licensing for details.  */
#ifndef cmFunctionBlocker_h
#define cmFunctionBlocker_h

#include "cmConfigure.h" // IWYU pragma: keep

#include <vector>

#include "cm_string_view.hxx"

#include "cmListFileCache.h"

class cmExecutionStatus;
class cmMakefile;

class cmFunctionBlocker
{
public:
  /**
   * should a function be blocked
   */
  bool IsFunctionBlocked(cmListFileFunction const& lff,
                         cmExecutionStatus& status);

  virtual ~cmFunctionBlocker() = default;

  /** Set/Get the context in which this blocker is created.  */
  void SetStartingContext(cmListFileContext const& lfc)
  {
    this->StartingContext = lfc;
  }
  cmListFileContext const& GetStartingContext() const
  {
    return this->StartingContext;
  }

private:
  virtual cm::string_view StartCommandName() const = 0;
  virtual cm::string_view EndCommandName() const = 0;

  virtual bool ArgumentsMatch(cmListFileFunction const& lff,
                              cmMakefile& mf) const = 0;

  virtual bool Replay(std::vector<cmListFileFunction> functions,
                      cmExecutionStatus& status) = 0;

private:
  cmListFileContext StartingContext;
  std::vector<cmListFileFunction> Functions;
  unsigned int ScopeDepth = 1;
};

#endif
