|
|
DataMuseum.dkPresents historical artifacts from the history of: Rational R1000/400 |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about Rational R1000/400 Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - metrics - download
Length: 4683 (0x124b)
Types: TextFile
Notes: R1k Text-file segment
└─⟦8527c1e9b⟧ Bits:30000544 8mm tape, Rational 1000, Arrival backup of disks in PAM's R1000
└─⟦cfc2e13cd⟧ »Space Info Vol 2«
└─⟦db497d070⟧
└─⟦this⟧
Version 2
Modif dans Kba :
- creation d'un paquetage generic_class_server dans generic_class
=> (parametres du generic = taille de allocation mem pour les messages
a stocker)
- correction de display => plus de pb d'affichage
- rappel : dans Kba une procedure One_inference_with_conflic_set a ete creee
afin de pouvoir faire un update apres chaq inference du MI
Le serveur de class est le suivant:
generic
Max_Change_Operations : Natural;
Max_Delete_Operations : Natural;
package Generic_Class_Server is
procedure Delete (The_User_Object : Class.User_Object);
procedure Change (The_Fact : Class.User_Object;
The_Slot : Slot_Names;
To_Value : Slot.Object);
procedure Update;
Server_Storage_Capacity_Overflow : exception;
end Generic_Class_Server;
separate (Generic_Fact_Base.Generic_Class)
package body Generic_Class_Server is
task Server is
entry Delete (The_User_Object : Class.User_Object);
entry Change (The_Fact : Class.User_Object;
The_Slot : Slot_Names;
To_Value : Slot.Object);
entry Update;
end Server;
type Delete_Messages is
record
What_Fact : Class.User_Object;
end record;
type Change_Messages is
record
What_Fact : Class.User_Object;
What_Slot : Slot_Names;
The_Value : Slot.Object;
end record;
type Change_Messages_Table is
array (1 .. Max_Change_Operations) of Change_Messages;
type Delete_Messages_Table is
array (1 .. Max_Delete_Operations) of Delete_Messages;
task body Server is
The_Change_Msg_Table : Change_Messages_Table;
The_Delete_Msg_Table : Delete_Messages_Table;
Nbr_Change_Msg : Natural := 0;
Nbr_Delete_Msg : Natural := 0;
begin
loop
select
accept Update do -- bloque l'appelant
while (Nbr_Delete_Msg > 0) loop
Generic_Class.Delete
(The_Delete_Msg_Table (Nbr_Delete_Msg).What_Fact);
Nbr_Delete_Msg := Nbr_Delete_Msg - 1;
end loop;
while (Nbr_Change_Msg > 0) loop
Generic_Class.Change
(The_Change_Msg_Table (Nbr_Change_Msg).What_Fact,
The_Change_Msg_Table (Nbr_Change_Msg).What_Slot,
The_Change_Msg_Table (Nbr_Change_Msg).The_Value);
Nbr_Change_Msg := Nbr_Change_Msg - 1;
end loop;
end Update;
or
accept Change (The_Fact : Class.User_Object;
The_Slot : Slot_Names;
To_Value : Slot.Object) do
Nbr_Change_Msg := Nbr_Change_Msg + 1;
The_Change_Msg_Table (Nbr_Change_Msg).What_Fact := The_Fact;
The_Change_Msg_Table (Nbr_Change_Msg).What_Slot := The_Slot;
The_Change_Msg_Table (Nbr_Change_Msg).The_Value := To_Value;
end Change;
or
accept Delete (The_User_Object : Class.User_Object) do
Nbr_Delete_Msg := Nbr_Delete_Msg + 1;
The_Delete_Msg_Table (Nbr_Delete_Msg).What_Fact :=
The_User_Object;
end Delete;
or
terminate;
end select;
end loop;
end Server;
procedure Delete (The_User_Object : Class.User_Object) is
begin
Server.Delete (The_User_Object);
exception
when Constraint_Error =>
raise Server_Storage_Capacity_Overflow;
end Delete;
procedure Change (The_Fact : Class.User_Object;
The_Slot : Slot_Names;
To_Value : Slot.Object) is
begin
Server.Change (The_Fact, The_Slot, To_Value);
exception
when Constraint_Error =>
raise Server_Storage_Capacity_Overflow;
end Change;
procedure Update is
begin
Server.Update;
end Update;
end Generic_Class_Server;
!!!!!!!!! il ne faut pas oublier le update lors de l'inferenc