--------------------------------------------------------------------------------------------------------------------------------------------------------------
-- Gnostic is Ada Generic Neural Object System Engineering.                                                                                                --
-- Gnostic (C) Copyright 2016 Manuel De Girardi.                                                                                                           --
--------------------------------------------------------------------------------------------------------------------------------------------------------------
  
--------------------------------------------------------------------------------------------------------------------------------------------------------------
-- Date        := 2016-11-29 04:04:12 ; 
-- Description : Ada Generic Neural Object System Engineering.                                                                                              --
-- Version     := 2016.20.1a ; 
-- Authors     : Manuel De Girardi.                                                                                                                         --
--------------------------------------------------------------------------------------------------------------------------------------------------------------

with Ada.Unchecked_Deallocation;
with Ada.Strings.Wide_Unbounded;
with Gnat.Os_Lib;
use Gnat;

package Gnos.Results is
   subtype U_String is Ada.Strings.Wide_Unbounded.Unbounded_Wide_String;
   use type U_String;
   
   function "+"(S: Wide_String) return U_String
     renames Ada.Strings.Wide_Unbounded.To_Unbounded_Wide_String;
 
   function "-"(U: U_String) return Wide_String
     renames Ada.Strings.Wide_Unbounded.To_Wide_String;
 
   type Variadic_Array is array(Positive range <>) of U_String;
   
   type Variadic_Access is access Variadic_Array;
   
   type Wide_String_Access is access all Wide_String;
   procedure Free is new Ada.Unchecked_Deallocation(Wide_String, Wide_String_Access);
   
   procedure Free is new Ada.Unchecked_Deallocation(Variadic_Array, Variadic_Access);
   
   type Wide_Result_Type is 
     abstract tagged
      record
	 File_Content   : Variadic_Access;
      end record;
   
   type Spawn_Result_Type is
     new Wide_Result_Type with
      record
	 Process_Id     : Gnat.Os_Lib.Process_Id;
	 Program_Name   : U_String;
	 Args           : Os_Lib.Argument_List_Access;	 
	 Output_File    : U_String;
	 Success        : Boolean := True;
	 Return_Code    : Integer := 0;
	 Err_To_Out     : Boolean := False;	 
      end record;
   
   
   type Search_Result_Type is
     new Wide_Result_Type with
      record
         Pattern   : Wide_String_Access := new Wide_String ' ("");
	 Address   : Os_Lib.String_Access;
         Doc_Name  : Wide_String_Access;
      end record;         
   
   
   type Result_Access is access all Wide_Result_Type'Class;
   
   function Spawn(Line : in String) return Spawn_Result_Type;
   
end Gnos.Results;