1//===-- State.cpp -----------------------------------------------*- C++ -*-===//
2//
3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4// See https://llvm.org/LICENSE.txt for license information.
5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6//
7//===----------------------------------------------------------------------===//
8
9#include "lldb/Utility/State.h"
10
11using namespace lldb;
12using namespace lldb_private;
13
14const char *lldb_private::StateAsCString(StateType state) {
15  switch (state) {
16  case eStateInvalid:
17    return "invalid";
18  case eStateUnloaded:
19    return "unloaded";
20  case eStateConnected:
21    return "connected";
22  case eStateAttaching:
23    return "attaching";
24  case eStateLaunching:
25    return "launching";
26  case eStateStopped:
27    return "stopped";
28  case eStateRunning:
29    return "running";
30  case eStateStepping:
31    return "stepping";
32  case eStateCrashed:
33    return "crashed";
34  case eStateDetached:
35    return "detached";
36  case eStateExited:
37    return "exited";
38  case eStateSuspended:
39    return "suspended";
40  }
41  return "unknown";
42}
43
44const char *lldb_private::GetPermissionsAsCString(uint32_t permissions) {
45  switch (permissions) {
46  case 0:
47    return "---";
48  case ePermissionsWritable:
49    return "-w-";
50  case ePermissionsReadable:
51    return "r--";
52  case ePermissionsExecutable:
53    return "--x";
54  case ePermissionsReadable | ePermissionsWritable:
55    return "rw-";
56  case ePermissionsReadable | ePermissionsExecutable:
57    return "r-x";
58  case ePermissionsWritable | ePermissionsExecutable:
59    return "-wx";
60  case ePermissionsReadable | ePermissionsWritable | ePermissionsExecutable:
61    return "rwx";
62  default:
63    break;
64  }
65  return "???";
66}
67
68bool lldb_private::StateIsRunningState(StateType state) {
69  switch (state) {
70  case eStateAttaching:
71  case eStateLaunching:
72  case eStateRunning:
73  case eStateStepping:
74    return true;
75
76  case eStateConnected:
77  case eStateDetached:
78  case eStateInvalid:
79  case eStateUnloaded:
80  case eStateStopped:
81  case eStateCrashed:
82  case eStateExited:
83  case eStateSuspended:
84    break;
85  }
86  return false;
87}
88
89bool lldb_private::StateIsStoppedState(StateType state, bool must_exist) {
90  switch (state) {
91  case eStateInvalid:
92  case eStateConnected:
93  case eStateAttaching:
94  case eStateLaunching:
95  case eStateRunning:
96  case eStateStepping:
97  case eStateDetached:
98    break;
99
100  case eStateUnloaded:
101  case eStateExited:
102    return !must_exist;
103
104  case eStateStopped:
105  case eStateCrashed:
106  case eStateSuspended:
107    return true;
108  }
109  return false;
110}
111