source: xplcommon/src/xplcommon/win32/Completer.h@ 21:eb59943050c9

Last change on this file since 21:eb59943050c9 was 21:eb59943050c9, checked in by István Váradi <ivaradi@…>, 11 years ago

Added the implementation of the local sockets for Win32 and it seems to work

File size: 4.6 KB
Line 
1// Copyright (c) 2012 by István Váradi
2
3// This file is part of libxplcommon, a common utility library for
4// development related to X-Plane
5
6// Redistribution and use in source and binary forms, with or without
7// modification, are permitted provided that the following conditions are met:
8
9// 1. Redistributions of source code must retain the above copyright notice, this
10// list of conditions and the following disclaimer.
11// 2. Redistributions in binary form must reproduce the above copyright notice,
12// this list of conditions and the following disclaimer in the documentation
13// and/or other materials provided with the distribution.
14
15// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
16// ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
17// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
18// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
19// ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
20// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
21// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
22// ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
23// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
24// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
25
26// The views and conclusions contained in the software and documentation are those
27// of the authors and should not be interpreted as representing official policies,
28// either expressed or implied, of the FreeBSD Project.
29
30#ifndef XPLCOMMON_WIN32_COMPLETER_H
31#define XPLCOMMON_WIN32_COMPLETER_H
32//------------------------------------------------------------------------------
33
34#include "Overlapped.h"
35#include "Overlappable.h"
36
37//------------------------------------------------------------------------------
38
39namespace xplcommon { namespace win32 {
40
41//------------------------------------------------------------------------------
42
43/**
44 * Base class for objects that handle the completion of some
45 * operation. They are associated with an Overlappable, and if that
46 * overlappable is non-blocking (i.e. has a waiter), an Overlapped
47 * object is created and stored in this object.
48 */
49class Completer
50{
51protected:
52 /**
53 * The overlapped object.
54 */
55 Overlapped* overlapped;
56
57protected:
58 /**
59 * Construct the completer for the given Overlappable.
60 */
61 Completer(Overlappable* overlappable);
62
63 /**
64 * Destroy the completer.
65 */
66 ~Completer();
67
68 /**
69 * Add the overlapped object (if any) to the given waiter.
70 */
71 void addTo(Waiter* waiter);
72
73 /**
74 * Remove the overlapped object (if any) from the waiter it is
75 * associated with.
76 */
77 void removeFromWaiter();
78
79 /**
80 * Determine if there is an overlapped object and it is being
81 * waited for.
82 */
83 bool isWaited() const;
84
85 /**
86 * Get the result of the overlapped operation, if any.
87 *
88 * @see Overlapped::getResult
89 */
90 bool getResult(DWORD& size, HANDLE file);
91};
92
93//------------------------------------------------------------------------------
94// Inline definitions
95//------------------------------------------------------------------------------
96
97inline Completer::Completer(Overlappable* overlappable) :
98 overlapped((overlappable->waiter==0) ? 0 : new Overlapped(*overlappable))
99{
100}
101
102//------------------------------------------------------------------------------
103
104inline Completer::~Completer()
105{
106 delete overlapped;
107}
108
109//------------------------------------------------------------------------------
110
111inline void Completer::addTo(Waiter* waiter)
112{
113 if (overlapped!=0 && waiter!=0) overlapped->addTo(*waiter);
114}
115
116//------------------------------------------------------------------------------
117
118inline void Completer::removeFromWaiter()
119{
120 if (overlapped!=0) overlapped->removeFromWaiter();
121}
122
123//------------------------------------------------------------------------------
124
125inline bool Completer::isWaited() const
126{
127 return overlapped!=0 && overlapped->isWaited();
128}
129
130//------------------------------------------------------------------------------
131
132inline bool Completer::getResult(DWORD& size, HANDLE file)
133{
134 return overlapped!=0 && overlapped->getResult(size, file);
135}
136
137//------------------------------------------------------------------------------
138
139} /* namespace xplcommon::win32 */ } /* namespace xplcommon */
140
141//------------------------------------------------------------------------------
142#endif // XPLCOMMON_WIN32_COMPLETER_H
143
144// Local Variables:
145// mode: C++
146// c-basic-offset: 4
147// indent-tabs-mode: nil
148// End:
Note: See TracBrowser for help on using the repository browser.