1 ------------------------------------------------------------------------------
3 -- GNAT RUN-TIME COMPONENTS --
5 -- S Y S T E M . P A R T I T I O N _ I N T E R F A C E --
8 -- (Dummy body for non-distributed case) --
10 -- Copyright (C) 1995-2004 Free Software Foundation, Inc. --
12 -- GNARL is free software; you can redistribute it and/or modify it under --
13 -- terms of the GNU General Public License as published by the Free Soft- --
14 -- ware Foundation; either version 2, or (at your option) any later ver- --
15 -- sion. GNARL is distributed in the hope that it will be useful, but WITH- --
16 -- OUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY --
17 -- or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License --
18 -- for more details. You should have received a copy of the GNU General --
19 -- Public License distributed with GNARL; see file COPYING. If not, write --
20 -- to the Free Software Foundation, 59 Temple Place - Suite 330, Boston, --
21 -- MA 02111-1307, USA. --
23 -- As a special exception, if other files instantiate generics from this --
24 -- unit, or you link this unit with other files to produce an executable, --
25 -- this unit does not by itself cause the resulting executable to be --
26 -- covered by the GNU General Public License. This exception does not --
27 -- however invalidate any other reasons why the executable file might be --
28 -- covered by the GNU Public License. --
30 -- GNAT was originally developed by the GNAT team at New York University. --
31 -- Extensive contributions were provided by Ada Core Technologies Inc. --
33 ------------------------------------------------------------------------------
35 package body System.Partition_Interface is
37 pragma Warnings (Off); -- supress warnings for unreferenced formals
41 type String_Access is access String;
43 -- To have a minimal implementation of U'Partition_ID.
46 type Pkg_List is access Pkg_Node;
47 type Pkg_Node is record
55 function getpid return Integer;
56 pragma Import (C, getpid);
58 PID : constant Integer := getpid;
60 function Lower (S : String) return String;
62 Passive_Prefix : constant String := "SP__";
63 -- String prepended in top of shared passive packages
68 RCI : in Boolean := True)
74 -----------------------------
75 -- Get_Active_Partition_Id --
76 -----------------------------
78 function Get_Active_Partition_ID
80 return System.RPC.Partition_ID
82 P : Pkg_List := Pkg_Head;
83 N : String := Lower (Name);
87 if P.Name.all = N then
88 return Get_Local_Partition_ID;
95 end Get_Active_Partition_ID;
97 ------------------------
98 -- Get_Active_Version --
99 ------------------------
101 function Get_Active_Version
107 end Get_Active_Version;
109 ----------------------------
110 -- Get_Local_Partition_Id --
111 ----------------------------
113 function Get_Local_Partition_ID return System.RPC.Partition_ID is
115 return System.RPC.Partition_ID (PID mod M);
116 end Get_Local_Partition_ID;
118 ------------------------------
119 -- Get_Passive_Partition_ID --
120 ------------------------------
122 function Get_Passive_Partition_ID
124 return System.RPC.Partition_ID
127 return Get_Local_Partition_ID;
128 end Get_Passive_Partition_ID;
130 -------------------------
131 -- Get_Passive_Version --
132 -------------------------
134 function Get_Passive_Version
140 end Get_Passive_Version;
142 ------------------------------
143 -- Get_RCI_Package_Receiver --
144 ------------------------------
146 function Get_RCI_Package_Receiver
148 return Interfaces.Unsigned_64
152 end Get_RCI_Package_Receiver;
154 -------------------------------
155 -- Get_Unique_Remote_Pointer --
156 -------------------------------
158 procedure Get_Unique_Remote_Pointer
159 (Handler : in out RACW_Stub_Type_Access)
163 end Get_Unique_Remote_Pointer;
169 function Lower (S : String) return String is
173 for J in T'Range loop
174 if T (J) in 'A' .. 'Z' then
175 T (J) := Character'Val (Character'Pos (T (J)) -
176 Character'Pos ('A') +
177 Character'Pos ('a'));
184 -------------------------------------
185 -- Raise_Program_Error_Unknown_Tag --
186 -------------------------------------
188 procedure Raise_Program_Error_Unknown_Tag
189 (E : in Ada.Exceptions.Exception_Occurrence)
192 Ada.Exceptions.Raise_Exception
193 (Program_Error'Identity, Ada.Exceptions.Exception_Message (E));
194 end Raise_Program_Error_Unknown_Tag;
200 package body RCI_Info is
202 -----------------------------
203 -- Get_Active_Partition_ID --
204 -----------------------------
206 function Get_Active_Partition_ID return System.RPC.Partition_ID is
207 P : Pkg_List := Pkg_Head;
208 N : String := Lower (RCI_Name);
212 if P.Name.all = N then
213 return Get_Local_Partition_ID;
220 end Get_Active_Partition_ID;
222 ------------------------------
223 -- Get_RCI_Package_Receiver --
224 ------------------------------
226 function Get_RCI_Package_Receiver return Interfaces.Unsigned_64 is
229 end Get_RCI_Package_Receiver;
233 ------------------------------
234 -- Register_Passive_Package --
235 ------------------------------
237 procedure Register_Passive_Package
238 (Name : in Unit_Name;
239 Version : in String := "")
242 Register_Receiving_Stub (Passive_Prefix & Name, null, Version);
243 end Register_Passive_Package;
245 -----------------------------
246 -- Register_Receiving_Stub --
247 -----------------------------
249 procedure Register_Receiving_Stub
250 (Name : in Unit_Name;
251 Receiver : in RPC.RPC_Receiver;
252 Version : in String := "")
255 if Pkg_Tail = null then
256 Pkg_Head := new Pkg_Node'(new String'(Lower (Name)), null);
257 Pkg_Tail := Pkg_Head;
260 Pkg_Tail.Next := new Pkg_Node'(new String'(Lower (Name)), null);
261 Pkg_Tail := Pkg_Tail.Next;
263 end Register_Receiving_Stub;
270 (Main : in Main_Subprogram_Type := null)
278 end System.Partition_Interface;