blob: a55cb67b1d787450ba45101b6af93140492fa100 [file] [log] [blame]
// Copyright 2019 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef SRC_DEVELOPER_DEBUG_ZXDB_CLIENT_EXECUTION_SCOPE_H_
#define SRC_DEVELOPER_DEBUG_ZXDB_CLIENT_EXECUTION_SCOPE_H_
#include "src/lib/fxl/memory/weak_ptr.h"
namespace zxdb {
class Target;
class Thread;
// Some things like breakpoints might be tied to a "scope" where they apply to. For example, a
// breakpoing could apply globally, to one target, or to one thread.
class ExecutionScope {
public:
enum Type {
kSystem, // Global.
kTarget, // Applies to all threads of a target.
kThread // Applies to only one thread.
};
ExecutionScope() = default; // System (global) scope.
explicit ExecutionScope(Target* t); // Target scope.
explicit ExecutionScope(Thread* t); // Thread scope.
Type type() const { return type_; }
// Possibly null! See variables below for requirements.
Target* target() const { return target_.get(); }
Thread* thread() const { return thread_.get(); }
private:
Type type_ = kSystem;
// The target or thread may get deleted before this class does so any pointers can be null
// even if the type() matches.
fxl::WeakPtr<Target> target_; // Possibly valid when type_ == kTarget or type_ == KThread;
fxl::WeakPtr<Thread> thread_; // Possibly valid when type_ == kThread;
};
} // namespace zxdb
#endif // SRC_DEVELOPER_DEBUG_ZXDB_CLIENT_EXECUTION_SCOPE_H_