aboutsummaryrefslogtreecommitdiff
path: root/include/lldb/Breakpoint/BreakpointName.h
diff options
context:
space:
mode:
authorDimitry Andric <dim@FreeBSD.org>2017-12-18 20:12:36 +0000
committerDimitry Andric <dim@FreeBSD.org>2017-12-18 20:12:36 +0000
commitef5d0b5e97ec8e6fa395d377b09aa7755e345b4f (patch)
tree27916256fdeeb57d10d2f3d6948be5d71a703215 /include/lldb/Breakpoint/BreakpointName.h
parent76e0736e7fcfeb179779e49c05604464b1ccd704 (diff)
downloadsrc-ef5d0b5e97ec8e6fa395d377b09aa7755e345b4f.tar.gz
src-ef5d0b5e97ec8e6fa395d377b09aa7755e345b4f.zip
Vendor import of lldb trunk r321017:vendor/lldb/lldb-trunk-r321017
Notes
Notes: svn path=/vendor/lldb/dist/; revision=326949 svn path=/vendor/lldb/lldb-trunk-r321017/; revision=326950; tag=vendor/lldb/lldb-trunk-r321017
Diffstat (limited to 'include/lldb/Breakpoint/BreakpointName.h')
-rw-r--r--include/lldb/Breakpoint/BreakpointName.h213
1 files changed, 213 insertions, 0 deletions
diff --git a/include/lldb/Breakpoint/BreakpointName.h b/include/lldb/Breakpoint/BreakpointName.h
new file mode 100644
index 000000000000..1cfa141011a0
--- /dev/null
+++ b/include/lldb/Breakpoint/BreakpointName.h
@@ -0,0 +1,213 @@
+//===-- BreakpointName.h --------------------------------------------*- C++ -*-===//
+//
+// The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef liblldb_Breakpoint_Name_h_
+#define liblldb_Breakpoint_Name_h_
+
+// C Includes
+// C++ Includes
+#include <memory>
+#include <string>
+#include <unordered_set>
+#include <vector>
+
+// Other libraries and framework includes
+// Project includes
+#include "lldb/Breakpoint/BreakpointID.h"
+#include "lldb/Breakpoint/BreakpointLocationCollection.h"
+#include "lldb/Breakpoint/BreakpointLocationList.h"
+#include "lldb/Breakpoint/BreakpointOptions.h"
+#include "lldb/Breakpoint/Stoppoint.h"
+#include "lldb/Core/Event.h"
+#include "lldb/Core/SearchFilter.h"
+#include "lldb/Utility/Flags.h"
+#include "lldb/Utility/StringList.h"
+#include "lldb/Utility/StructuredData.h"
+
+namespace lldb_private {
+
+class BreakpointName {
+public:
+ class Permissions
+ {
+ public:
+
+ enum PermissionKinds { listPerm = 0, disablePerm = 1,
+ deletePerm = 2, allPerms = 3 };
+
+ Permissions(bool in_list, bool in_disable, bool in_delete)
+ {
+ m_permissions[listPerm] = in_list;
+ m_permissions[disablePerm] = in_disable;
+ m_permissions[deletePerm] = in_delete;
+ m_set_mask.Set(permissions_mask[allPerms]);
+ }
+
+ Permissions(const Permissions &rhs)
+ {
+ m_permissions[listPerm] = rhs.m_permissions[listPerm];
+ m_permissions[disablePerm] = rhs.m_permissions[disablePerm];
+ m_permissions[deletePerm] = rhs.m_permissions[deletePerm];
+ m_set_mask = rhs.m_set_mask;
+ }
+
+ Permissions()
+ {
+ m_permissions[listPerm] = true;
+ m_permissions[disablePerm] = true;
+ m_permissions[deletePerm] = true;
+ m_set_mask.Clear();
+ }
+
+ const Permissions &operator= (const Permissions &rhs)
+ {
+ if (this != &rhs) {
+ m_permissions[listPerm] = rhs.m_permissions[listPerm];
+ m_permissions[disablePerm] = rhs.m_permissions[disablePerm];
+ m_permissions[deletePerm] = rhs.m_permissions[deletePerm];
+ m_set_mask = rhs.m_set_mask;
+ }
+ return *this;
+ }
+
+ void Clear() {
+ *this = Permissions();
+ }
+
+ // Merge the permissions from incoming into this set of permissions.
+ // Only merge set permissions, and most restrictive permission wins.
+ void MergeInto(const Permissions &incoming)
+ {
+ MergePermission(incoming, listPerm);
+ MergePermission(incoming, disablePerm);
+ MergePermission(incoming, deletePerm);
+ }
+
+ bool GetAllowList() const { return GetPermission(listPerm); }
+ bool SetAllowList(bool value) { return SetPermission(listPerm, value); }
+
+ bool GetAllowDelete() const { return GetPermission(deletePerm); }
+ bool SetAllowDelete(bool value) { return SetPermission(deletePerm, value); }
+
+ bool GetAllowDisable() const { return GetPermission(disablePerm); }
+ bool SetAllowDisable(bool value) { return SetPermission(disablePerm,
+ value); }
+
+ bool GetPermission(enum PermissionKinds permission) const
+ {
+ return m_permissions[permission];
+ }
+
+ bool GetDescription(Stream *s, lldb::DescriptionLevel level);
+
+ bool IsSet(enum PermissionKinds permission) const
+ {
+ return m_set_mask.Test(permissions_mask[permission]);
+ }
+
+ bool AnySet() {
+ return m_set_mask.AnySet(permissions_mask[allPerms]);
+ }
+
+ private:
+ static const Flags::ValueType permissions_mask[allPerms + 1];
+
+ bool m_permissions[allPerms];
+ Flags m_set_mask;
+
+ bool SetPermission(enum PermissionKinds permission, bool value)
+ {
+ bool old_value = m_permissions[permission];
+ m_permissions[permission] = value;
+ m_set_mask.Set(permissions_mask[permission]);
+ return old_value;
+ }
+
+ // If either side disallows the permission, the resultant disallows it.
+ void MergePermission(const Permissions &incoming,
+ enum PermissionKinds permission)
+ {
+ if (incoming.IsSet(permission))
+ {
+ SetPermission(permission, !(m_permissions[permission] |
+ incoming.m_permissions[permission]));
+ }
+ }
+ };
+
+ BreakpointName(const ConstString &name, const char *help = nullptr) :
+ m_name(name), m_options(false)
+ {
+ SetHelp(help);
+ }
+
+ BreakpointName(const ConstString &name,
+ BreakpointOptions &options,
+ const Permissions &permissions = Permissions(),
+ const char *help = nullptr) :
+ m_name(name), m_options(options),
+ m_permissions(permissions) {
+ SetHelp(help);
+ };
+
+ BreakpointName(const BreakpointName &rhs) :
+ m_name(rhs.m_name), m_options(rhs.m_options),
+ m_permissions(rhs.m_permissions), m_help(rhs.m_help)
+ {}
+
+ BreakpointName(const ConstString &name, const Breakpoint &bkpt,
+ const char *help);
+
+ const ConstString &GetName() const { return m_name; }
+ BreakpointOptions &GetOptions() { return m_options; }
+ const BreakpointOptions &GetOptions() const { return m_options; }
+
+ void SetOptions(const BreakpointOptions &options) {
+ m_options = options;
+ }
+
+ Permissions &GetPermissions() { return m_permissions; }
+ const Permissions &GetPermissions() const { return m_permissions; }
+ void SetPermissions(const Permissions &permissions) {
+ m_permissions = permissions;
+ }
+
+ bool GetPermission(Permissions::PermissionKinds permission) const
+ {
+ return m_permissions.GetPermission(permission);
+ }
+
+ void SetHelp(const char *description)
+ {
+ if (description)
+ m_help.assign(description);
+ else
+ m_help.clear();
+ }
+
+ const char *GetHelp()
+ {
+ return m_help.c_str();
+ }
+
+ // Returns true if any options were set in the name
+ bool GetDescription(Stream *s, lldb::DescriptionLevel level);
+
+ void ConfigureBreakpoint(lldb::BreakpointSP bp_sp);
+
+private:
+ ConstString m_name;
+ BreakpointOptions m_options;
+ Permissions m_permissions;
+ std::string m_help;
+};
+
+} // namespace lldb_private
+
+#endif // liblldb_Breakpoint_Name_h_