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
;