File : net.ads


with System.Storage_Elements, System.Address_To_Access_Conversions;

package Net is
   type Debug_Mode is (Inherit, No, Error, Info, Dump);
   do_debug : Debug_Mode := No;
   
   type    Integer_32 is            range 0 .. 2**32 - 1;
   subtype Integer_31 is Integer_32 range 0 .. 2**31 - 1;
   subtype Integer_30 is Integer_32 range 0 .. 2**30 - 1;
   subtype Integer_29 is Integer_32 range 0 .. 2**29 - 1;
   subtype Integer_28 is Integer_32 range 0 .. 2**28 - 1;
   subtype Integer_27 is Integer_32 range 0 .. 2**27 - 1;
   subtype Integer_26 is Integer_32 range 0 .. 2**26 - 1;
   subtype Integer_25 is Integer_32 range 0 .. 2**25 - 1;
   subtype Integer_24 is Integer_32 range 0 .. 2**24 - 1;
   subtype Integer_23 is Integer_32 range 0 .. 2**23 - 1;
   subtype Integer_22 is Integer_32 range 0 .. 2**22 - 1;
   subtype Integer_21 is Integer_32 range 0 .. 2**21 - 1;
   subtype Integer_20 is Integer_32 range 0 .. 2**20 - 1;
   subtype Integer_19 is Integer_32 range 0 .. 2**19 - 1;
   subtype Integer_18 is Integer_32 range 0 .. 2**18 - 1;
   subtype Integer_17 is Integer_32 range 0 .. 2**17 - 1;
   subtype Integer_16 is Integer_32 range 0 .. 2**16 - 1;
   subtype Integer_15 is Integer_32 range 0 .. 2**15 - 1;
   subtype Integer_14 is Integer_32 range 0 .. 2**14 - 1;
   subtype Integer_13 is Integer_32 range 0 .. 2**13 - 1;
   subtype Integer_12 is Integer_32 range 0 .. 2**12 - 1;
   subtype Integer_11 is Integer_32 range 0 .. 2**11 - 1;
   subtype Integer_10 is Integer_32 range 0 .. 2**10 - 1;
   subtype Integer_9  is Integer_32 range 0 .. 2**9  - 1;
   subtype Integer_8  is Integer_32 range 0 .. 2**8  - 1;
   subtype Integer_7  is Integer_32 range 0 .. 2**7  - 1;
   subtype Integer_6  is Integer_32 range 0 .. 2**6  - 1;
   subtype Integer_5  is Integer_32 range 0 .. 2**5  - 1;
   subtype Integer_4  is Integer_32 range 0 .. 2**4  - 1;
   subtype Integer_3  is Integer_32 range 0 .. 2**3  - 1;
   subtype Integer_2  is Integer_32 range 0 .. 2**2  - 1;
   subtype Integer_1  is Integer_32 range 0 .. 2**1  - 1;

   subtype Data is System.Storage_Elements.Storage_Element;
   type Payload_Type is record
      data   : System.Address;
      length : Integer_32;
   end record;

   function "+" (p : System.Address; o : Integer_32) return System.Address;
   pragma Inline ("+");
   
   type Address is abstract tagged null record;
   function New_Address (b : Payload_Type) return Address is abstract;
   function To_String (a : Address) return String is abstract;
   
   Not_Implemented : exception;
   procedure Unimplemented (msg : in String);
end Net;