home *** CD-ROM | disk | FTP | other *** search
- -- Chapter 21 - Program 4
-
- -- This package uses a data structure composed of three INTEGER
- -- variables. It allow the user to add two structures, component
- -- by component, or subtract component by component. Provision is
- -- also made to build a structure from three numbers, or decompose
- -- a structure into its components.
-
- package Three is
- type DATA_STRUCTURE is limited private;
- function "+"(Data1, Data2 : DATA_STRUCTURE) return DATA_STRUCTURE;
- function "-"(Data1, Data2 : DATA_STRUCTURE) return DATA_STRUCTURE;
- function Build_Structure(Val1, Val2, Val3 : INTEGER) return
- DATA_STRUCTURE;
- procedure Decompose(Data1 : DATA_STRUCTURE;
- Val1, Val2, Val3 : out INTEGER);
- procedure Assign_Struct(Data1 : out DATA_STRUCTURE;
- Data2 : in DATA_STRUCTURE);
- function Compare(Data1, Data2 : DATA_STRUCTURE) return BOOLEAN;
-
- private
- type DATA_STRUCTURE is
- record
- Value1 : INTEGER;
- Value2 : INTEGER;
- Value3 : INTEGER;
- end record;
- end Three;
-
-
-
- package body Three is
-
- function "+"(Data1, Data2 : DATA_STRUCTURE) return DATA_STRUCTURE is
- Temp : DATA_STRUCTURE;
- begin
- Temp.Value1 := Data1.Value1 + Data2.Value1;
- Temp.Value2 := Data1.Value2 + Data2.Value2;
- Temp.Value3 := Data1.Value3 + Data2.Value3;
- return Temp;
- end "+";
-
-
- function "-"(Data1, Data2 : DATA_STRUCTURE) return DATA_STRUCTURE is
- Temp : DATA_STRUCTURE;
- begin
- Temp.Value1 := Data1.Value1 - Data2.Value1;
- Temp.Value2 := Data1.Value2 - Data2.Value2;
- Temp.Value3 := Data1.Value3 - Data2.Value3;
- return Temp;
- end "-";
-
-
- function Build_Structure(Val1, Val2, Val3 : INTEGER) return
- DATA_STRUCTURE is
- Temp : DATA_STRUCTURE;
- begin
- Temp.Value1 := Val1;
- Temp.Value2 := Val2;
- Temp.Value3 := Val3;
- return Temp;
- end Build_Structure;
-
-
- procedure Decompose(Data1 : DATA_STRUCTURE;
- Val1, Val2, Val3 : out INTEGER) is
- begin
- Val1 := Data1.Value1;
- Val2 := Data1.Value2;
- Val3 := Data1.Value3;
- end Decompose;
-
-
-
- procedure Assign_Struct(Data1 : out DATA_STRUCTURE;
- Data2 : in DATA_STRUCTURE) is
- begin
- Data1 := Data2;
- end Assign_Struct;
-
-
-
- function Compare(Data1, Data2 : DATA_STRUCTURE) return BOOLEAN is
- begin
- return Data1 = Data2;
- end Compare;
-
- end Three;
-
-
-
-
- -- This program exercises the package Three as an illustration.
-
- with Text_IO; use Text_IO;
- with Three; use Three;
-
- procedure LimPriv is
-
- My_Data, Extra_Data : DATA_STRUCTURE;
-
- begin
-
- Assign_Struct(My_Data, Build_Structure(3,7,13));
- Assign_Struct(Extra_Data, Build_Structure(-4,77,0));
- Assign_Struct(My_Data, My_Data + Extra_Data);
-
- if not Compare(My_Data, Extra_Data) then
- Put_Line("The two structures are not equal.");
- end if;
-
- Assign_Struct(My_Data, Extra_Data);
-
- if Compare(My_Data, Extra_Data) then
- Put_Line("The two structures are equal now.");
- end if;
-
- -- The following line is illegal with the limited private type
- -- My_Data.Value1 := My_Data.Value1 + 13;
-
- end LimPriv;
-
-
-
-
- -- Result of execution
-
- -- The two structures are not equal.
- -- The two structures are equal now.
-
-