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