https://github.com/Kitware/CMake
Revision 8d6a0b9364581fbb95746c93cac4ec3c213f534b authored by Brad King on 27 October 2020, 12:20:48 UTC, committed by Kitware Robot on 27 October 2020, 12:20:54 UTC
dd77dec18d VS: Don't compute CUDA options unless necessary
e9109dec36 Merge branch 'ninja-multi-per-config-sources' into release-3.18
7c0de4175b Merge branch 'cmake-E-cat-binary' into release-3.18

Acked-by: Kitware Robot <kwrobot@kitware.com>
Merge-request: !5422
2 parent s 698851c + dd77dec
Raw File
Tip revision: 8d6a0b9364581fbb95746c93cac4ec3c213f534b authored by Brad King on 27 October 2020, 12:20:48 UTC
Merge topic 'cuda_vs_skip_computation' into release-3.19
Tip revision: 8d6a0b9
cmVisualStudioSlnParser.h
/* Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
   file Copyright.txt or https://cmake.org/licensing for details.  */
#pragma once

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

#include <bitset>
#include <iosfwd>
#include <string>

#include <cm/string_view>

#include <stddef.h>

class cmSlnData;

class cmVisualStudioSlnParser
{
public:
  enum ParseResult
  {
    ResultOK = 0,

    ResultInternalError = -1,
    ResultExternalError = 1,

    ResultErrorOpeningInput = ResultExternalError,
    ResultErrorReadingInput,
    ResultErrorInputStructure,
    ResultErrorInputData,

    ResultErrorBadInternalState = ResultInternalError,
    ResultErrorUnsupportedDataGroup = ResultInternalError - 1
  };

  enum DataGroup
  {
    DataGroupProjectsBit,
    DataGroupProjectDependenciesBit,
    DataGroupSolutionConfigurationsBit,
    DataGroupProjectConfigurationsBit,
    DataGroupSolutionFiltersBit,
    DataGroupGenericGlobalSectionsBit,
    DataGroupCount
  };

  using DataGroupSet = std::bitset<DataGroupCount>;

  static const DataGroupSet DataGroupProjects;
  static const DataGroupSet DataGroupProjectDependencies;
  static const DataGroupSet DataGroupSolutionConfigurations;
  static const DataGroupSet DataGroupProjectConfigurations;
  static const DataGroupSet DataGroupSolutionFilters;
  static const DataGroupSet DataGroupGenericGlobalSections;
  static const DataGroupSet DataGroupAll;

  bool Parse(std::istream& input, cmSlnData& output,
             DataGroupSet dataGroups = DataGroupAll);

  bool ParseFile(const std::string& file, cmSlnData& output,
                 DataGroupSet dataGroups = DataGroupAll);

  ParseResult GetParseResult() const;

  size_t GetParseResultLine() const;

  bool GetParseHadBOM() const;

protected:
  class State;

  friend class State;
  class ParsedLine;

  struct ResultData
  {
    ParseResult Result;
    size_t ResultLine;
    bool HadBOM;

    ResultData();
    void Clear();
    void SetError(ParseResult error, size_t line);
  } LastResult;

  bool IsDataGroupSetSupported(DataGroupSet dataGroups) const;

  bool ParseImpl(std::istream& input, cmSlnData& output, State& state);

  bool ParseBOM(std::istream& input, std::string& line, State& state);

  bool ParseMultiValueTag(const std::string& line, ParsedLine& parsedLine,
                          State& state);

  bool ParseSingleValueTag(const std::string& line, ParsedLine& parsedLine,
                           State& state);

  bool ParseKeyValuePair(const std::string& line, ParsedLine& parsedLine,
                         State& state);

  bool ParseTag(cm::string_view fullTag, ParsedLine& parsedLine, State& state);

  bool ParseValue(const std::string& value, ParsedLine& parsedLine);
};
back to top