/* Remote notification in GDB protocol
- Copyright (C) 1988-2018 Free Software Foundation, Inc.
+ Copyright (C) 1988-2019 Free Software Foundation, Inc.
This file is part of GDB.
#ifndef REMOTE_NOTIF_H
#define REMOTE_NOTIF_H
-#include "queue.h"
+#include <memory>
+#include "common/queue.h"
/* An event of a type of async remote notification. */
struct notif_event
{
- /* Destructor. Release everything from SELF, but not SELF
- itself. */
- void (*dtr) (struct notif_event *self);
+ virtual ~notif_event ()
+ {
+ }
};
+/* A unique pointer holding a notif_event. */
+
+typedef std::unique_ptr<notif_event> notif_event_up;
+
/* ID of the notif_client. */
enum REMOTE_NOTIF_ID
function may throw exception if contents in BUF is not the
expected event. */
void (*parse) (remote_target *remote,
- struct notif_client *self, char *buf,
+ struct notif_client *self, const char *buf,
struct notif_event *event);
/* Send field <ack_command> to remote, and do some checking. If
something wrong, throw an exception. */
void (*ack) (remote_target *remote,
- struct notif_client *self, char *buf,
+ struct notif_client *self, const char *buf,
struct notif_event *event);
/* Check this notification client can get pending events in
struct notif_client *self);
/* Allocate an event. */
- struct notif_event *(*alloc_event) (void);
+ notif_event_up (*alloc_event) ();
/* Id of this notif_client. */
const enum REMOTE_NOTIF_ID id;
struct notif_event *pending_event[REMOTE_NOTIF_LAST];
};
-void remote_notif_ack (remote_target *remote, notif_client *nc, char *buf);
+void remote_notif_ack (remote_target *remote, notif_client *nc,
+ const char *buf);
struct notif_event *remote_notif_parse (remote_target *remote,
notif_client *nc,
- char *buf);
-
-void notif_event_xfree (struct notif_event *event);
+ const char *buf);
void handle_notification (struct remote_notif_state *notif_state,
- char *buf);
+ const char *buf);
void remote_notif_process (struct remote_notif_state *state,
struct notif_client *except);