/*
 * This Source Code Form is subject to the terms of the Mozilla Public
 * License, v. 2.0. If a copy of the MPL was not distributed with this
 * file, You can obtain one at http://mozilla.org/MPL/2.0/.
 *
 * Copyright 2016 Danny Robson <danny@nerdcruft.net>
 */

#include "windows.hpp"

#include "../posix/fd.hpp"

namespace cruft::win32 {
    struct handle {
        handle ();
        explicit handle (HANDLE&&);
        handle (handle&&);
        handle (const handle&) = delete;
        handle (posix::fd&&);
        ~handle ();

        operator HANDLE& (void) &; 
        HANDLE& native (void) &;
        const HANDLE& native (void) const &;

        void reset (HANDLE);
        void reset (handle&&);

        static handle current_process (void);

    private:
        HANDLE m_native;
    };
}