/*
 * Copyright (C) 2008 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
/*
 * These come out of the JDWP documentation.
 */
#ifndef ART_JDWP_JDWPCONSTANTS_H_
#define ART_JDWP_JDWPCONSTANTS_H_

#include <iosfwd>

namespace art {

namespace JDWP {

/*
 * Error constants.
 */
enum JdwpError {
  ERR_NONE                                        = 0,
  ERR_INVALID_THREAD                              = 10,
  ERR_INVALID_THREAD_GROUP                        = 11,
  ERR_INVALID_PRIORITY                            = 12,
  ERR_THREAD_NOT_SUSPENDED                        = 13,
  ERR_THREAD_SUSPENDED                            = 14,
  ERR_THREAD_NOT_ALIVE                            = 15,
  ERR_INVALID_OBJECT                              = 20,
  ERR_INVALID_CLASS                               = 21,
  ERR_CLASS_NOT_PREPARED                          = 22,
  ERR_INVALID_METHODID                            = 23,
  ERR_INVALID_LOCATION                            = 24,
  ERR_INVALID_FIELDID                             = 25,
  ERR_INVALID_FRAMEID                             = 30,
  ERR_NO_MORE_FRAMES                              = 31,
  ERR_OPAQUE_FRAME                                = 32,
  ERR_NOT_CURRENT_FRAME                           = 33,
  ERR_TYPE_MISMATCH                               = 34,
  ERR_INVALID_SLOT                                = 35,
  ERR_DUPLICATE                                   = 40,
  ERR_NOT_FOUND                                   = 41,
  ERR_INVALID_MONITOR                             = 50,
  ERR_NOT_MONITOR_OWNER                           = 51,
  ERR_INTERRUPT                                   = 52,
  ERR_INVALID_CLASS_FORMAT                        = 60,
  ERR_CIRCULAR_CLASS_DEFINITION                   = 61,
  ERR_FAILS_VERIFICATION                          = 62,
  ERR_ADD_METHOD_NOT_IMPLEMENTED                  = 63,
  ERR_SCHEMA_CHANGE_NOT_IMPLEMENTED               = 64,
  ERR_INVALID_TYPESTATE                           = 65,
  ERR_HIERARCHY_CHANGE_NOT_IMPLEMENTED            = 66,
  ERR_DELETE_METHOD_NOT_IMPLEMENTED               = 67,
  ERR_UNSUPPORTED_VERSION                         = 68,
  ERR_NAMES_DONT_MATCH                            = 69,
  ERR_CLASS_MODIFIERS_CHANGE_NOT_IMPLEMENTED      = 70,
  ERR_METHOD_MODIFIERS_CHANGE_NOT_IMPLEMENTED     = 71,
  ERR_NOT_IMPLEMENTED                             = 99,
  ERR_NULL_POINTER                                = 100,
  ERR_ABSENT_INFORMATION                          = 101,
  ERR_INVALID_EVENT_TYPE                          = 102,
  ERR_ILLEGAL_ARGUMENT                            = 103,
  ERR_OUT_OF_MEMORY                               = 110,
  ERR_ACCESS_DENIED                               = 111,
  ERR_VM_DEAD                                     = 112,
  ERR_INTERNAL                                    = 113,
  ERR_UNATTACHED_THREAD                           = 115,
  ERR_INVALID_TAG                                 = 500,
  ERR_ALREADY_INVOKING                            = 502,
  ERR_INVALID_INDEX                               = 503,
  ERR_INVALID_LENGTH                              = 504,
  ERR_INVALID_STRING                              = 506,
  ERR_INVALID_CLASS_LOADER                        = 507,
  ERR_INVALID_ARRAY                               = 508,
  ERR_TRANSPORT_LOAD                              = 509,
  ERR_TRANSPORT_INIT                              = 510,
  ERR_NATIVE_METHOD                               = 511,
  ERR_INVALID_COUNT                               = 512,
};
std::ostream& operator<<(std::ostream& os, const JdwpError& value);


/*
 * ClassStatus constants.  These are bit flags that can be ORed together.
 */
enum JdwpClassStatus {
  CS_VERIFIED             = 0x01,
  CS_PREPARED             = 0x02,
  CS_INITIALIZED          = 0x04,
  CS_ERROR                = 0x08,
};
std::ostream& operator<<(std::ostream& os, const JdwpClassStatus& value);

/*
 * EventKind constants.
 */
enum JdwpEventKind {
  EK_SINGLE_STEP          = 1,
  EK_BREAKPOINT           = 2,
  EK_FRAME_POP            = 3,
  EK_EXCEPTION            = 4,
  EK_USER_DEFINED         = 5,
  EK_THREAD_START         = 6,
  EK_THREAD_DEATH         = 7, // Formerly known as THREAD_END.
  EK_CLASS_PREPARE        = 8,
  EK_CLASS_UNLOAD         = 9,
  EK_CLASS_LOAD           = 10,
  EK_FIELD_ACCESS         = 20,
  EK_FIELD_MODIFICATION   = 21,
  EK_EXCEPTION_CATCH      = 30,
  EK_METHOD_ENTRY         = 40,
  EK_METHOD_EXIT          = 41,
  EK_METHOD_EXIT_WITH_RETURN_VALUE = 42,
  EK_MONITOR_CONTENDED_ENTER       = 43,
  EK_MONITOR_CONTENDED_ENTERED     = 44,
  EK_MONITOR_WAIT         = 45,
  EK_MONITOR_WAITED       = 46,
  EK_VM_START             = 90, // Formerly known as VM_INIT.
  EK_VM_DEATH             = 99,
  EK_VM_DISCONNECTED      = 100, // "Never sent across JDWP".
};
std::ostream& operator<<(std::ostream& os, const JdwpEventKind& value);

/*
 * Values for "modKind" in EventRequest.Set.
 */
enum JdwpModKind {
  MK_COUNT                = 1,
  MK_CONDITIONAL          = 2,
  MK_THREAD_ONLY          = 3,
  MK_CLASS_ONLY           = 4,
  MK_CLASS_MATCH          = 5,
  MK_CLASS_EXCLUDE        = 6,
  MK_LOCATION_ONLY        = 7,
  MK_EXCEPTION_ONLY       = 8,
  MK_FIELD_ONLY           = 9,
  MK_STEP                 = 10,
  MK_INSTANCE_ONLY        = 11,
  MK_SOURCE_NAME_MATCH    = 12, // Since Java 6.
};
std::ostream& operator<<(std::ostream& os, const JdwpModKind& value);

/*
 * InvokeOptions constants (bit flags).
 */
enum JdwpInvokeOptions {
  INVOKE_SINGLE_THREADED  = 0x01,
  INVOKE_NONVIRTUAL       = 0x02,
};
std::ostream& operator<<(std::ostream& os, const JdwpInvokeOptions& value);

/*
 * StepDepth constants.
 */
enum JdwpStepDepth {
  SD_INTO                 = 0,    // Step into method calls.
  SD_OVER                 = 1,    // Step over method calls.
  SD_OUT                  = 2,    // Step out of current method.
};
std::ostream& operator<<(std::ostream& os, const JdwpStepDepth& value);

/*
 * StepSize constants.
 */
enum JdwpStepSize {
  SS_MIN                  = 0,    // Step by minimum (for example, one bytecode).
  SS_LINE                 = 1,    // If possible, step to next line.
};
std::ostream& operator<<(std::ostream& os, const JdwpStepSize& value);

/*
 * SuspendPolicy constants.
 */
enum JdwpSuspendPolicy {
  SP_NONE                 = 0,    // Suspend no threads.
  SP_EVENT_THREAD         = 1,    // Suspend event thread.
  SP_ALL                  = 2,    // Suspend all threads.
};
std::ostream& operator<<(std::ostream& os, const JdwpSuspendPolicy& value);

/*
 * SuspendStatus constants.
 */
enum JdwpSuspendStatus {
  SUSPEND_STATUS_NOT_SUSPENDED = 0,
  SUSPEND_STATUS_SUSPENDED     = 1,
};
std::ostream& operator<<(std::ostream& os, const JdwpSuspendStatus& value);

/*
 * ThreadStatus constants.
 */
enum JdwpThreadStatus {
  TS_ZOMBIE               = 0,
  TS_RUNNING              = 1,        // RUNNING
  TS_SLEEPING             = 2,        // (in Thread.sleep())
  TS_MONITOR              = 3,        // WAITING (monitor wait)
  TS_WAIT                 = 4,        // (in Object.wait())
};
std::ostream& operator<<(std::ostream& os, const JdwpThreadStatus& value);

/*
 * TypeTag constants.
 */
enum JdwpTypeTag {
  TT_CLASS                = 1,
  TT_INTERFACE            = 2,
  TT_ARRAY                = 3,
};
std::ostream& operator<<(std::ostream& os, const JdwpTypeTag& value);

/*
 * Tag constants.
 */
enum JdwpTag {
  JT_ARRAY                 = '[',
  JT_BYTE                  = 'B',
  JT_CHAR                  = 'C',
  JT_OBJECT                = 'L',
  JT_FLOAT                 = 'F',
  JT_DOUBLE                = 'D',
  JT_INT                   = 'I',
  JT_LONG                  = 'J',
  JT_SHORT                 = 'S',
  JT_VOID                  = 'V',
  JT_BOOLEAN               = 'Z',
  JT_STRING                = 's',
  JT_THREAD                = 't',
  JT_THREAD_GROUP          = 'g',
  JT_CLASS_LOADER          = 'l',
  JT_CLASS_OBJECT          = 'c',
};
std::ostream& operator<<(std::ostream& os, const JdwpTag& value);

}  // namespace JDWP

}  // namespace art

#endif  // ART_JDWP_JDWPCONSTANTS_H_
