--------------------------------------------------------------------------------
-- <auto-generated>                                                           --
--     This code was generated by a tool.                                     --
--                                                                            --
--     Changes to this file may cause incorrect behavior and will be lost if  --
--     the code is regenerated.                                               --
-- </auto-generated>                                                          --
--------------------------------------------------------------------------------
--------------------------------------------------------------------------------
--                                                                            --
--    Copyright(c) 2021 Alexander Gamper, All Rights Reserved.                --
--                                                                            --
--    Ada-Win32                                                               --
--    Version   : 2.0.0.0                                                     --
--                                                                            --
-- This program is free software: you can redistribute it and / or modify     --
-- it under the terms of the GNU Lesser General Public License as published by--
-- the Free Software Foundation, either version 3 of the License, or          --
-- (at your option) any later version.                                        --
--                                                                            --
-- 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 Lesser General Public License for more details.                        --
--                                                                            --
-- You should have received a copy of the GNU Lesser General Public License   --
-- along with this program.If not, see http://www.gnu.org/licenses            --
--                                                                            --
--------------------------------------------------------------------------------
with System;
with Ada.Strings.Wide_Unbounded;
--------------------------------------------------------------------------------
package Win32_Ada is

   -----------------------------------------------------------------------------

   type Int8  is range -(2**(8  - Integer'(1))) .. +(2**(8  - Integer'(1))) -1;
   type Int16 is range -(2**(16 - Integer'(1))) .. +(2**(16 - Integer'(1))) -1;
   type Int32 is range -(2**(32 - Integer'(1))) .. +(2**(32 - Integer'(1))) -1;
   type Int64 is range -(2**(64 - Integer'(1))) .. +(2**(64 - Integer'(1))) -1;

   type Int8_Ptr  is access Int8;
   type Int16_Ptr is access Int16;
   type Int32_Ptr is access Int32;
   type Int64_Ptr is access Int64;
   type IntPtr is access Int64;
   type IntPtr_Ptr is access IntPtr;

   type Int8_Array  is array (Natural range <>) of aliased Int8;
   type Int16_Array is array (Natural range <>) of aliased Int16;
   type Int32_Array is array (Natural range <>) of aliased Int32;
   type Int64_Array is array (Natural range <>) of aliased Int64;
   type IntPtr_Array is array (Natural range <>) of aliased Int64;

   type Int8_Array_Ptr is array (Natural range <>) of aliased Int8_Ptr;
   type Int16_Array_Ptr is array (Natural range <>) of aliased Int16_Ptr;
   type Int32_Array_Ptr is array (Natural range <>) of aliased Int32_Ptr;
   type Int64_Array_Ptr is array (Natural range <>) of aliased Int64_Ptr;
   type IntPtr_Array_Ptr is array (Natural range <>) of aliased IntPtr;

   type UInt8  is mod 2 ** 8;
   type UInt16 is mod 2 ** 16;
   type UInt32 is mod 2 ** 32;
   type UInt64 is mod 2 ** 64;

   type UInt8_Ptr  is access UInt8;
   type UInt16_Ptr is access UInt16;
   type UInt32_Ptr is access UInt32;
   type UInt64_Ptr is access UInt64;
   type UIntPtr is access UInt64;
   type UIntPtr_Ptr is access UIntPtr;

   type UInt8_Array  is array (Natural range <>) of aliased UInt8;
   type UInt16_Array is array (Natural range <>) of aliased UInt16;
   type UInt32_Array is array (Natural range <>) of aliased UInt32;
   type UInt64_Array is array (Natural range <>) of aliased UInt64;
   type UIntPtr_Array is array (Natural range <>) of aliased UInt64;

   type UInt8_Array_Ptr is array (Natural range <>) of aliased UInt8_Ptr;
   type UInt16_Array_Ptr is array (Natural range <>) of aliased UInt16_Ptr;
   type UInt32_Array_Ptr is array (Natural range <>) of aliased UInt32_Ptr;
   type UInt64_Array_Ptr is array (Natural range <>) of aliased UInt64_Ptr;
   type UIntPtr_Array_Ptr is array (Natural range <>) of aliased UIntPtr;

   subtype SByte is Int8;
   subtype SByte_Ptr is Int8_Ptr;
   subtype SByte_Array is Int8_Array;
   subtype SByte_Array_Ptr is Int8_Array_Ptr;

   subtype Byte is UInt8;
   subtype Byte_Ptr is UInt8_Ptr;
   subtype Byte_Array is UInt8_Array;
   subtype Byte_Array_Ptr is UInt8_Array_Ptr;

   subtype Wide_Char is Wide_character;
   type Wide_Char_Ptr is access all Wide_Char;
   pragma No_Strict_Aliasing (Wide_Char_Ptr);
   type Wide_Char_Array is array (Natural range <>) of aliased Wide_Char;

   type Single is new Standard.Float;
   type Single_Ptr is access Single;
   type Single_Array is array (Natural range <>) of aliased Single;

   type Double is new Standard.Long_Float;
   type Double_Ptr is access Double;
   type Double_Array is array (Natural range <>) of aliased Double;

   type Boolean is new Standard.Boolean;
   type Boolean_Ptr is access Boolean;
   type Boolean_Array is array (Natural range <>) of aliased Boolean;

   subtype HString is System.Address;
   type HString_Ptr is access HString;
   type HString_Array is array (Natural range <>) of aliased HString;

   subtype WString is Ada.Strings.Wide_Unbounded.Unbounded_Wide_String;
   type WString_Ptr is access WString;
   type WString_Array is array (Natural range <>) of aliased WString;

   subtype Address is System.Address;
   type Address_Ptr is access all System.Address;
   type Address_Array is array (Natural range <>) of aliased System.Address;

   type Decimal is record
      Data1  : UInt32;
      Data2  : UInt32;
      Data3  : UInt32;
      Data4  : UInt32;
   end record;
   type Decimal_Ptr is access Decimal;
   type Decimal_Array is array (Natural range <>) of aliased Decimal;

   type GUID is record
      Data1  : UInt32;
      Data2  : UInt16;
      Data3  : UInt16;
      Data4  : UInt8_Array(0..7);
   end record;
   type GUID_Ptr is access constant GUID;
   type GUID_Array is array (Natural range <>) of aliased GUID;
   type GUID_Array_Ptr is array (Natural range <>) of aliased GUID_Ptr;

   subtype IID is GUID;
   type IID_Ptr is access constant IID;
   type IID_Array is array (Natural range <>) of aliased IID;
   type IID_Array_Ptr is array (Natural range <>) of aliased IID_Ptr;

   subtype CLSID is GUID;
   type CLSID_Ptr is access constant CLSID;
   type CLSID_Array is array (Natural range <>) of aliased CLSID;
   type CLSID_Array_Ptr is array (Natural range <>) of aliased CLSID_Ptr;

   type Void is null record;
   type Void_Ptr is access all Void;
   type Void_Array is array (Natural range <>) of aliased Void;
   type Void_Array_Ptr is array (Natural range <>) of aliased Void_Ptr;

   subtype HResult is UInt32;

end;
