text: //===-- State.cpp ---------------------------------------------------------===//
  //
  // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
  // See https://llvm.org/LICENSE.txt for license information.
  // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
  //
  //===----------------------------------------------------------------------===//
  
  #include "lldb/Utility/State.h"
  
  using namespace lldb;
  using namespace lldb_private;
  
  const char *lldb_private::StateAsCString(StateType state) {
    switch (state) {
    case eStateInvalid:
      return "invalid";
    case eStateUnloaded:
      return "unloaded";
    case eStateConnected:
      return "connected";
    case eStateAttaching:
      return "attaching";
    case eStateLaunching:
      return "launching";
    case eStateStopped:
      return "stopped";
    case eStateRunning:
      return "running";
    case eStateStepping:
      return "stepping";
    case eStateCrashed:
      return "crashed";
    case eStateDetached:
      return "detached";
    case eStateExited:
      return "exited";
    case eStateSuspended:
      return "suspended";
    }
    return "unknown";
  }
  
  const char *lldb_private::GetPermissionsAsCString(uint32_t permissions) {
    switch (permissions) {
    case 0:
      return "---";
    case ePermissionsWritable:
      return "-w-";
    case ePermissionsReadable:
      return "r--";
    case ePermissionsExecutable:
      return "--x";
    case ePermissionsReadable | ePermissionsWritable:
      return "rw-";
    case ePermissionsReadable | ePermissionsExecutable:
      return "r-x";
    case ePermissionsWritable | ePermissionsExecutable:
      return "-wx";
    case ePermissionsReadable | ePermissionsWritable | ePermissionsExecutable:
      return "rwx";
    default:
      break;
    }
    return "???";
  }
  
  bool lldb_private::StateIsRunningState(StateType state) {
    switch (state) {
    case eStateAttaching:
    case eStateLaunching:
    case eStateRunning:
    case eStateStepping:
      return true;
  
    case eStateConnected:
    case eStateDetached:
    case eStateInvalid:
    case eStateUnloaded:
    case eStateStopped:
    case eStateCrashed:
    case eStateExited:
    case eStateSuspended:
      break;
    }
    return false;
  }
  
  bool lldb_private::StateIsStoppedState(StateType state, bool must_exist) {
    switch (state) {
    case eStateInvalid:
    case eStateConnected:
    case eStateAttaching:
    case eStateLaunching:
    case eStateRunning:
    case eStateStepping:
    case eStateDetached:
      break;
  
    case eStateUnloaded:
    case eStateExited:
      return !must_exist;
  
    case eStateStopped:
    case eStateCrashed:
    case eStateSuspended:
      return true;
    }
    return false;
  }
  