/* Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
   file LICENSE.rst or https://cmake.org/licensing for details.  */
#pragma once

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

#include <vector>

#include <cm/string_view>

#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 EndCommandSupportsArguments() const { return true; }

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

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

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