Ignore:
Timestamp:
01/02/13 06:43:16 (11 years ago)
Author:
István Váradi <ivaradi@…>
Branch:
default
Phase:
public
Message:

Cleaned up and simplified the code

File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/xplcommon/win32/Completer.h

    r21 r22  
    5151protected:
    5252    /**
     53     * The overlappable object this completer belongs to.
     54     */
     55    Overlappable& overlappable;
     56
     57    /**
    5358     * The overlapped object.
    5459     */
     
    6469     * Destroy the completer.
    6570     */
    66     ~Completer();
     71    virtual ~Completer();
    6772
    6873    /**
     
    8893     * @see Overlapped::getResult
    8994     */
    90     bool getResult(DWORD& size, HANDLE file);
     95    bool getResult(DWORD& size);
     96
     97    /**
     98     * Check whether we are waiting for an overlapped result and if
     99     * so, return that.
     100     *
     101     * @param result will contain the result to return if we are
     102     * waiting for an overlapped result.
     103     *
     104     * @return whether we are waiting for an overlapped result
     105     */
     106    bool checkWaitedResult(bool& result);
     107
     108    /**
     109     * Handle the given result coming from an overlapped object.
     110     */
     111    virtual void handleWaitedResult(DWORD size) = 0;
    91112};
    92113
     
    96117
    97118inline Completer::Completer(Overlappable* overlappable) :
     119    overlappable(*overlappable),
    98120    overlapped((overlappable->waiter==0) ? 0 : new Overlapped(*overlappable))
    99121{
     
    130152//------------------------------------------------------------------------------
    131153
    132 inline bool Completer::getResult(DWORD& size, HANDLE file)
     154inline bool Completer::getResult(DWORD& size)
    133155{
    134     return overlapped!=0 && overlapped->getResult(size, file);
     156    return overlapped!=0 && overlapped->getResult(size, overlappable.handle);
     157}
     158
     159//------------------------------------------------------------------------------
     160
     161inline bool Completer::checkWaitedResult(bool& result)
     162{
     163    if (!isWaited()) {
     164        return false;
     165    }
     166
     167    DWORD size = 0;
     168    result = getResult(size);
     169
     170    if (result) {
     171        removeFromWaiter();
     172        handleWaitedResult(size);
     173    } else if (overlappable.failed()) {
     174        removeFromWaiter();
     175    }
     176
     177    return true;
    135178}
    136179
Note: See TracChangeset for help on using the changeset viewer.