text: // Copyright (c) .NET Foundation and contributors. All rights reserved.
  // Licensed under the MIT license. See LICENSE file in the project root for full license information.
  
  #ifndef __RUNTIME_CONFIG_H__
  #define __RUNTIME_CONFIG_H__
  
  #include <list>
  
  #include "../pal/pal.h"
  #include "cpprest/json.h"
  
  typedef web::json::value json_value;
  
  class runtime_config_t
  {
  public:
      runtime_config_t(const pal::string_t& path, const pal::string_t& dev_path);
      bool is_valid() { return m_valid; }
      const pal::string_t& get_path() { return m_path; }
      const pal::string_t& get_dev_path() { return m_dev_path; }
      const pal::string_t& get_gc_server() const;
      const pal::string_t& get_fx_version() const;
      const pal::string_t& get_fx_name() const;
      const std::list<pal::string_t>& get_probe_paths() const;
      bool get_patch_roll_fwd() const;
      bool get_prerelease_roll_fwd() const;
      bool get_portable() const;
      bool parse_opts(const json_value& opts);
      void config_kv(std::vector<pal::string_t>*, std::vector<pal::string_t>*) const;
  
  private:
      bool ensure_parsed();
      bool ensure_dev_config_parsed();
   
      std::unordered_map<pal::string_t, pal::string_t> m_properties;
      std::vector<std::string> m_prop_keys;
      std::vector<std::string> m_prop_values;
      std::list<pal::string_t> m_probe_paths;
      pal::string_t m_fx_name;
      pal::string_t m_fx_ver;
      bool m_patch_roll_fwd;
      bool m_prerelease_roll_fwd;
  
      pal::string_t m_dev_path;
      pal::string_t m_path;
      bool m_portable;
      bool m_valid;
  };
  #endif // __RUNTIME_CONFIG_H__