Rietveld Code Review Tool
Help | Bug tracker | Discussion group | Source code | Sign in
(563)

Unified Diff: src/core/model/fd-reader.h

Issue 342870043: Visual Studio conditional code for core module (Closed)
Patch Set: Updates to resolve review comments Created 5 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Please Sign in to add in-line comments.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « src/core/model/fatal-impl.cc ('k') | src/core/model/global-value.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/core/model/fd-reader.h
===================================================================
new file mode 100755
--- /dev/null
+++ b/src/core/model/fd-reader.h
@@ -0,0 +1,144 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2010 The Boeing Company
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation;
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ * Author: Tom Goff <thomas.goff@boeing.com>
+ */
+
+#ifndef WIN32_FD_READER_H
+#define WIN32_FD_READER_H
+
+#include <stdint.h>
+
+#include "callback.h"
+#include "system-thread.h"
+#include "event-id.h"
+
+#include "ns3/ns3-module.h"
+#define NS3_MODULE NS3_CORE_MODULE
+#include "ns3/ns3-export.h"
+
+/**
+ * \file
+ * \ingroup system
+ * ns3::FdReader declaration.
+ */
+
+namespace ns3 {
+
+/**
+ * \ingroup system
+ * \brief A class that asynchronously reads from a file descriptor.
+ *
+ * This class can be used to start a system thread that reads from a
+ * given file descriptor and invokes a given callback when data is
+ * received. This class handles thread management automatically but
+ * the \p DoRead() method must be implemented by a subclass.
+ */
+class NS3_EXPORT FdReader : public SimpleRefCount<FdReader>
+{
+public:
+ /** Constructor. */
+ FdReader();
+ /** Destructor. */
+ virtual ~FdReader();
+
+ /**
+ * Start a new read thread.
+ *
+ * \param [in] fd A valid file descriptor open for reading.
+ *
+ * \param [in] readCallback A callback to invoke when new data is
+ * available.
+ */
+ void Start (int fd, Callback<void, uint8_t *, ssize_t> readCallback);
+
+ /**
+ * Stop the read thread and reset internal state. This does not
+ * close the file descriptor used for reading.
+ */
+ void Stop (void);
+
+protected:
+
+ /**
+ * \brief A structure representing data read.
+ */
+ struct Data
+ {
+ /** Default constructor, with null buffer and zero length. */
+ Data () : m_buf (0), m_len (0) {}
+ /**
+ * Construct from a buffer of a given length.
+ *
+ * \param [in] buf The buffer.
+ * \param [in] len The size of the buffer, in bytes.
+ */
+ Data (uint8_t *buf, ssize_t len) : m_buf (buf), m_len (len) {}
+ /** The read data buffer. */
+ uint8_t *m_buf;
+ /** The size of the read data buffer, in bytes. */
+ ssize_t m_len;
+ };
+
+ /**
+ * \brief The read implementation.
+ *
+ * The value of \p m_len returned controls further processing. The
+ * callback function is only invoked when \p m_len is positive; any
+ * data read is not processed when \p m_len is negative; reading
+ * stops when \p m_len is zero.
+ *
+ * The management of memory associated with \p m_buf must be
+ * compatible with the read callback.
+ *
+ * \return A structure representing what was read.
+ */
+ virtual FdReader::Data DoRead (void) = 0;
+
+ /**
+ * \brief The file descriptor to read from.
+ */
+ int m_fd;
+
+private:
+
+ /** The asynchronous function which performs the read. */
+ void Run (void);
+ /** Event handler scheduled for destroy time to halt the thread. */
+ void DestroyEvent (void);
+
+ /** The main thread callback function to invoke when we have data. */
+ Callback<void, uint8_t *, ssize_t> m_readCallback;
+
+ /** The thread doing the read, created and launched by Start(). */
+ Ptr<SystemThread> m_readThread;
+
+ /** Pipe used to signal events between threads. */
+ int m_evpipe[2];
+ /** Signal the read thread to stop. */
+ bool m_stop;
+
+ /**
+ * The event scheduled for destroy time which will invoke DestroyEvent
+ * and halt the thread.
+ */
+ EventId m_destroyEvent;
+};
+
+} // namespace ns3
+
+#endif /* WIN32_FD_READER_H */
« no previous file with comments | « src/core/model/fatal-impl.cc ('k') | src/core/model/global-value.h » ('j') | no next file with comments »

Powered by Google App Engine
RSS Feeds Recent Issues | This issue
This is Rietveld f62528b