//===-- SBUnixSignals.h -----------------------------------------------*- C++
//-*-===//
//
// 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
//
//===----------------------------------------------------------------------===//

#ifndef LLDB_SBUnixSignals_h_
#define LLDB_SBUnixSignals_h_

#include "lldb/API/SBDefines.h"

namespace lldb {

class LLDB_API SBUnixSignals {
public:
  SBUnixSignals();

  SBUnixSignals(const lldb::SBUnixSignals &rhs);

  ~SBUnixSignals();

  const SBUnixSignals &operator=(const lldb::SBUnixSignals &rhs);

  void Clear();

  bool IsValid() const;

  const char *GetSignalAsCString(int32_t signo) const;

  int32_t GetSignalNumberFromName(const char *name) const;

  bool GetShouldSuppress(int32_t signo) const;

  bool SetShouldSuppress(int32_t signo, bool value);

  bool GetShouldStop(int32_t signo) const;

  bool SetShouldStop(int32_t signo, bool value);

  bool GetShouldNotify(int32_t signo) const;

  bool SetShouldNotify(int32_t signo, bool value);

  int32_t GetNumSignals() const;

  int32_t GetSignalAtIndex(int32_t index) const;

protected:
  friend class SBProcess;
  friend class SBPlatform;

  SBUnixSignals(lldb::ProcessSP &process_sp);

  SBUnixSignals(lldb::PlatformSP &platform_sp);

  lldb::UnixSignalsSP GetSP() const;

  void SetSP(const lldb::UnixSignalsSP &signals_sp);

private:
  lldb::UnixSignalsWP m_opaque_wp;
};

} // namespace lldb

#endif // LLDB_SBUnixSignals_h_
