|
|
DataMuseum.dkPresents historical artifacts from the history of: Rational R1000/400 Tapes |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about Rational R1000/400 Tapes Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - metrics - downloadIndex: T V
Length: 122280 (0x1dda8)
Types: TextFile
Names: »V«
└─⟦d10a02448⟧ Bits:30000409 8mm tape, Rational 1000, ENVIRONMENT, D_12_7_3
└─⟦fc9b38f02⟧ »DATA«
└─⟦9b46a407a⟧
└─⟦12c68c704⟧
└─⟦this⟧
└─⟦5f3412b64⟧ Bits:30000745 8mm tape, Rational 1000, ENVIRONMENT 12_6_5 TOOLS
└─⟦91c658230⟧ »DATA«
└─⟦458657fb6⟧
└─⟦220843204⟧
└─⟦this⟧
with Action;
with Calendar;
with Default;
with Diana;
with Error_Messages;
with Job_Segment;
with Machine;
with System;
package Directory is
pragma Subsystem (Directory, Private_Part => Closed);
pragma Module_Name (4, 1701);
-- VISIBLE PART ORGANIZATION
-- 1. Introductory comments and types. Defines the key types
-- Directory.Declaration (declarations in the directory system),
-- Directory.Object (Managed Objects in the directory system),
-- Directory.Version (Versions of managed directory objects), etc.
-- 2. Package Naming. Provides facilities for establishing a context
-- for name resolution and facilities for resolving string names.
-- 3. Package Ada. Defines an Ada Unit as a kind of Directory.Object.
-- Provides type-specific operations for constructing and manipulating
-- Ada Units. Included here because of the initimate relation between
-- Ada Units and the Directory (i.e., Ada Units ARE the directory
-- structure).
-- 4. Package Traversal. Operations for traversing the directory
-- structure (which extends through all Ada units in the system).
-- 5. Package Declaration_Operations. Provides the basic operations
-- for installing, coding, and withdrawing declarations.
-- 6. Package Object_Operations. Standard Directory operations for
-- Creating, Freezing, Destroying and Copying managed objects in the
-- Directory. Includes a special form of create to facilitate
-- construction of packages (serving as subdirectories).
-- 7. Package Policy.
-- 8. Package Control_Point. Defines a control point as a distinguished
-- point (package or library) in the package directory system. A control
-- point specificies the disk volume for storing its contents and the
-- policies which will apply to its contents.
-- 9. Package Statistics. Queries about Directory Objects.
-- This package is the main interface to the directory subsystem.
-- The Directory system provides the structure for storing, managing
-- and naming objects. The directory provides the following mappings,
-- which should help clarify the relations between types.
-- Directory:
-- String <=> Directory.Declaration
-- Directory.Declaration <=> Directory.Object
-- Directory.Object X Directory.Version_Name => Directory.Version
-- Directory.Declaration == Diana.Tree
-- Directory.Version == Standard.Object.Id
-- Object Management System:
-- Object.Id => Data
-- The package directory consists of declarations represented
-- with Diana (Directory.Declaration). Some declarations correspond
-- to managed Directory Objects (Directory.Object). The declaration
-- for a Directory Object is either a constant declaration with
-- the type (derived from) Directory.Object, or a program unit stub.
-- Allowing only constants prevents garbage formation and simpifies
-- some control issues. The type of the managed object defines its
-- class (Directory.Class). Program units belong to the class Ada.
-- The class reflects which object manager manages objects of that
-- type, as well as reflecting the type. A Directory Object has one
-- or more versions (Directory.Version == Standard.Object.Id)
-- which can be selected by using the appropriate version name
-- (Directory.Version_Name).
-- Managed objects in the directory are of type Directory.Object.
-- Some complexity is introduced by the fact that a program unit
-- has a runtime value which is an elaborated subprogram variable
-- or package variable (or whatever) and also has a source value
-- which is a managed value that provides access to the (Diana)
-- program representation. When applied to program units,
-- the operations defined here apply only to the source value.
-- Most operations which take an object as a parameter also take
-- a version name. If the version name is defaulted, then the
-- default version is computed (consistent with applicable policies).
-- Ada.Unit and Polymorphic_IO.File (and others) are ultimately
-- of type Directory.Object and provide type specific operations.
-- The general paradigm is that type independent operations
-- (traversal, create, copy, destroy, etc.) are provided in
-- directory, while type specific operations are provided by the
-- packages (Directory.Ada, Polymorphic_io, etc.) which introduce
-- specific managed types.
-- No exceptions are propagated from this package, except those
-- associated with type specific operations
Default_Wait : constant Duration := 0.5;
type Error_Status is --
(Successful, -- No problems encountered.
Lock_Error, -- Some synchronization error occurred,
-- usually failure to acquire access to some
-- object within the specified maximum delay
Semantic_Error, -- An operation requiring (Ada) semantic
-- consistency discovered semantic errors.
Code_Generation_Error, -- An error was detected during cg.
Obsolescence_Error, -- A change was prevented because it
-- obsolesced installed declarations.
Bad_Tree_Parameter, -- An actual tree parameter failed to meet
-- the requirements of the formal subtype.
Illegal_Operation, -- The attempted operation is not legal
-- when applied to the given parameters.
Consistency_Error, -- The operation is inconsistent with the
-- current state of the universe.
Version_Error, -- The specified version does not exist.
Name_Error, -- Errors occured resolving a name.
Access_Error, -- The operation violates access control
-- policies.
Policy_Error, -- The operation violates some other policy
-- that applies at this point.
Bad_Action, -- The Action.Id provided is illegal.
Class_Error, -- The class of the object passed to the
-- operation is incompatible with op
-- either because the op expects a
-- particular class, or because the
-- op is a type independent op which
-- is not supported for the given class.
Other_Error -- When all else fails ...
);
subtype Declaration is Diana.Tree;
-- A declaration (Diana class Item). Either the Id node or the
-- actual Item node is accepted as representing the declaration.
-- The Id is "preferred", and is returned by operations here.
type Object is private;
-- Managed objects in the directory are of the type Directory.Object.
function Nil return Directory.Object;
function Is_Nil (The_Object : Directory.Object) return Boolean;
function Hash (The_Object : Directory.Object) return Integer;
function Unique (The_Object : Directory.Object) return Long_Integer;
type Version is private;
-- A Directory.Object can be viewed as a set of managed values (of
-- type Directory.Version) where each value represents a different
-- version of the object. Managed values are built upon the more
-- primitive Object.Id type provided by the Object Management System.
function Nil return Version;
function Is_Nil (The_Version : Version) return Boolean;
function Hash (The_Version : Version) return Integer;
function Unique (The_Version : Version) return Long_Integer;
subtype Version_Name is Integer;
subtype Real_Version_Name is Version_Name range 1 .. Version_Name'Last;
-- Each Version has a name, which may be used to select a particular
-- Version from an Object.
Default_Version : constant Version_Name := 0;
Max_Version : constant Version_Name := -1;
Min_Version : constant Version_Name := -2;
Nil_Version : constant Version_Name := -3;
New_Version : constant Version_Name := -4;
All_Versions : constant Version_Name := -5;
-- Reserved version names.
function Get_Version_Name (The_Version : Version) return Version_Name;
-- Returns the Real_Version_Name for a version, or Nil_Version if an error.
function Version_Name_Image (The_Name : Version_Name) return String;
-- Returns a name of the form Vnn or a descriptive string for reserved
-- names.
type Class is private;
-- The class of an object identifies which manager is responsible for
-- the objects, and also identifies the user visible type (derived from
-- Directory.Object), providing the user view of that class of object.
function Nil return Class;
function Is_Nil (The_Id : Class) return Boolean;
function Hash (The_Id : Class) return Integer;
function Get_Class (For_Object : Directory.Object) return Class;
function Get_Class (The_Type : Declaration) return Class;
function Class_Image (The_Class : Class) return String;
function Class_Value (Image : String) return Class;
type Subclass is new Natural;
-- Subclasses distinguish different 'flavors' of objects of a
-- given class.
function Nil return Subclass;
function Is_Nil (The_Id : Subclass) return Boolean;
function Unique (The_Id : Subclass) return Integer;
function Subclass_Image (The_Subclass : Subclass) return String;
function Subclass_Value (Image : String) return Subclass;
function Short_Subclass_Image (The_Subclass : Subclass) return String;
function Get_Subclass (The_Object : Directory.Object) return Subclass;
function Get_Class (The_Subclass : Subclass) return Class;
type Target_Key is private;
-- Basically a descriptor of target semanticist/code_generator/etc.
function Nil return Target_Key;
function Is_Nil (K : Target_Key) return Boolean;
subtype Switches_Type is Version;
-- Switches are used to provide user control over optional functionality.
-- Switches are represented by a special file type, represented by the
-- Version of the directory object containing the switch values.
Default_Position : constant Natural := Natural'Last;
-- Specifies the end of the list.
Default_Retention_Count : constant := -1;
-- Use existing count or inherit one from the parent object.
type Package_Part is (Visible_Part, Body_Part, Both_Parts);
type Change_Limit is
(Object_Only, -- Given object may be altered, set is ignored.
Same_Objects, -- Objects in the set may be altered.
Same_Libraries, -- Objects in libraries in the set may be altered.
Same_Worlds, -- Objects in worlds in the set may be altered.
Any_Object -- Anything may be changed, set is ignored
);
-- A Change_Limit, along with an Object_Set.Set, will determine which
-- objects may be implicitly modified (usually by the cg_controller)
-- in order to perform the requested operation.
----------------------------------------------------------------------
package Object_Set is
type Set is private;
Nil : constant Set;
procedure Initialize (The_Set : out Set; Storage : System.Segment);
function Cardinality (The_Set : Set) return Natural;
function Is_Empty (The_Set : Set) return Boolean;
procedure Make_Empty (The_Set : Set);
procedure Copy (Target : Set; Source : Set);
function Is_Member (The_Set : Set; The_Object : Object) return Boolean;
procedure Add (The_Set : Set; The_Object : Object);
procedure Delete (The_Set : Set; The_Object : Object);
type Iterator is private;
procedure Init (Iter : out Iterator;
The_Set : Set;
Storage : System.Segment);
procedure Next (Iter : in out Iterator);
function Value (Iter : Iterator) return Object;
function Done (Iter : Iterator) return Boolean;
end Object_Set;
----------------------------------------------------------------------
package Naming is
-- Provides mechanisms for resolving names and for
-- establishing a context for name resolution.
subtype Name is String;
-- Lexically and syntactically an Ada Name.
subtype Simple_Name is String;
-- A simple ada name. Basically, an identifier or operator.
type Name_Status is --
(Successful, -- The name was resolved.
Bad_Context, -- The context was not a valid context for
-- name resolution.
Ill_Formed_Name, -- The name was not well formed lexically or
-- syntacticly.
Undefined, -- The name could not be found in the given
-- context.
Lock_Error, -- Indirect file is locked.
Access_Error, -- Access to objects denied.
Ambiguous, -- Because of overloading or wildcards, the
-- name resolved to more than one entity.
No_Selection, -- Nothing is selected.
Cursor_Not_In_Selection, Selections_Not_Supported,
Class_Error, No_Declaration, No_Object, No_Editor,
Unsuccessful -- resolution failed for some other reason.
);
function Diagnosis
(Status : Name_Status; Name : Naming.Name) return String;
-- Returns a string form of the status, suitable for error messages.
subtype Context is Diana.Tree;
-- Allows specification of a semantic context as an insertion point
-- or as an Item (in which case the context is after the item),
-- or as a block, decl_s or item_s (in which case the context
-- is at the end of the corresponding declarative part) or a
-- comp_unit corresponding to a package (in which case the
-- context is at the end of the visible part or the body block).
-- The context must be installed. Name resolution context will
-- start as the library enclosing the current context. The string
-- "[]" will force it to be the context given here.
procedure Get_Context (The_Context : out Naming.Context;
The_Version : Version;
Status : out Error_Status;
Action_Id : Action.Id := Action.Null_Id;
Max_Wait : Duration := Default_Wait);
procedure Get_Context (The_Context : out Naming.Context;
The_Unit : Directory.Object;
Status : out Error_Status;
Version : Version_Name := Default_Version;
Action_Id : Action.Id := Action.Null_Id;
Max_Wait : Duration := Default_Wait);
-- The_Version must be an installed ada unit.
procedure Set_Default_Context
(The_Context : Naming.Context;
Status : out Error_Status;
For_Job : Default.Process_Id := Default.Process);
procedure Set_Default_Context
(The_Context : Version;
Status : out Error_Status;
Action_Id : Action.Id := Action.Null_Id;
Max_Wait : Duration := Default_Wait;
For_Job : Default.Process_Id := Default.Process);
-- Establishes the default naming context for a given job.
-- The second form sets the context using the comp_unit of the
-- given ada unit. The unit must be an installed ada unit.
function Default_Context
(For_Job : Default.Process_Id := Default.Process)
return Naming.Context;
-- Returns the default name resolution context for this job.
-- If no context has been specified, returns the Universe_Context.
function Universe_Context return Naming.Context;
-- Return the context representing the root of the universe.
type Iterator is private;
-- Generalized Wildcard iterator
function Nil return Iterator;
function Is_Nil (Iter : Iterator) return Boolean;
procedure Resolve (Iter : out Iterator;
Source : Naming.Name;
Status : out Name_Status;
Environment : Naming.Context := Default_Context;
Deleted_Ok : Boolean := False;
Objects_Only : Boolean := True;
Heap : System.Segment := Job_Segment.Get;
Action_Id : Action.Id := Action.Null_Id;
Max_Wait : Duration := Default_Wait);
-- Resolves (ambiguous) Source name in the given environment. In
-- Delta, the other form of ambiguous resolve will be withdrawn.
-- This is only mechanism provided for iterating at the version
-- level or for deleted versions. Also facilitates derivation of
-- target name (with substitution characters) from corresponding
-- source name (with wildcards) If Deleted_Ok is true, deleted (but
-- not expunged) objects will be included in the iteration.
-- (Deleted objects must have at least one extant version, but may
-- have no declaration.) If Objects_Only is true, only (separate)
-- objects that match the source name will be included; when false,
-- Ada declarations will be included even if no separate object is
-- associated with them. Resolution is more efficient if
-- Objects_Only is true. (Deleted_Ok implies Objects_Only)
procedure Reset (Iter : in out Iterator);
-- Restore the iterator to its initial (post-Resolve) state.
procedure Next (Iter : in out Iterator);
function Done (Iter : Iterator) return Boolean;
function Get_Class (Iter : Iterator) return Directory.Class;
function Get_Subclass (Iter : Iterator) return Directory.Subclass;
procedure Get_Declaration (Iter : Iterator;
The_Decl : out Directory.Declaration;
Status : out Error_Status;
Action_Id : Action.Id := Action.Null_Id;
Max_Wait : Duration := Default_Wait);
procedure Get_Object (Iter : Iterator;
The_Object : out Directory.Object;
Status : out Error_Status);
procedure Get_Version (Iter : Iterator;
The_Version : out Directory.Version;
Status : out Error_Status;
Action_Id : Action.Id := Action.Null_Id;
Max_Wait : Duration := Default_Wait);
procedure Get_Root (Iter : Iterator;
The_Root : out Diana.Tree;
Status : out Error_Status;
Action_Id : Action.Id := Action.Null_Id;
Max_Wait : Duration := Default_Wait);
function Source_Name (Iter : Iterator) return Name;
function Target_Name (Iter : Iterator; Target : Name) return Name;
-- Replaces the substitution characters in the given Target name
-- with the appropriate values derived from the current entity of
-- the iteration.
function Status (Iter : Iterator) return Name_Status;
-- Returns the status of the last operation performed on the
-- iteration variable.
function Has_Substitution_Characters (Target : Name) return Boolean;
function Target_Name (The_Decl : Directory.Declaration;
Source : Name;
Target : Name) return Name;
function Target_Name (The_Object : Directory.Object;
Source : Name;
Target : Name) return Name;
function Target_Name (The_Version : Directory.Version;
Source : Name;
Target : Name) return Name;
-- Given an entity and a source name (with wild cards) that
-- matches the name of the entity, returns a target string in which
-- substitution characters have been replaced by the matching
-- portions of the entity's name as indicated by the source name
-- pattern.
procedure Resolve (Name : Naming.Name;
The_Object : out Directory.Object;
Status : out Name_Status;
Environment : Naming.Context := Default_Context;
Action_Id : Action.Id := Action.Null_Id;
Max_Wait : Duration := Default_Wait);
procedure Resolve (Name : Naming.Name;
Environment : Naming.Context;
Def_Id : out Directory.Declaration;
Status : out Name_Status;
Action_Id : Action.Id := Action.Null_Id;
Max_Wait : Duration := Default_Wait);
procedure Resolve (Name : Naming.Name;
The_Version : out Directory.Version;
Status : out Name_Status;
Environment : Naming.Context := Default_Context;
Deleted_Ok : Boolean := False;
Action_Id : Action.Id := Action.Null_Id;
Max_Wait : Duration := Default_Wait);
-- Resolve name to specified version. If Deleted_Ok is true, a version
-- will be returned if it exists even if it has been deleted.
type Special_String_Type is --
(Not_Special, -- string is not of the form "<mumble>"
Unknown_String, -- Unrecognized string of the right form.
Image_String, -- "<IMAGE>", the current window or selection
Cursor_String, -- "<CURSOR>", the object under the cursor
Region_String, -- "<REGION>", the current selected object
Selection_String, -- "<SELECTION>", selected and the cursor in selection.
Text_String, -- "<TEXT>", the text of the current selection
Activity_String, -- "<ACTIVITY>", the current activity or selection.
Switch_String -- "<SWITCH>", the current switch file or selection.
);
-- Various special strings of the form "<mumble>" can be used to
-- resolve to items on the screen. These special strings can be
-- imbedded in names passed to the resolution procedures. Any
-- unique prefix of "mumble" may be used (e.g., "<mum>").
function String_Type (The_Name : String) return Special_String_Type;
-- Classify a special_string by returning its type.
function Is_Well_Formed (A_Name : Name) return Boolean;
-- Tests whether a name is lexically and syntactically valid.
function Get_Prefix (The_Name : Name) return Name;
-- Removes the last segment from a selected name and returns
-- the prefix.
-- Prefix ("A.B.C") => "A.B"
-- Prefix ("A") => ""
function Get_Simple_Name (The_Name : Name) return Simple_Name;
-- Returns only the last segment of a selected name.
-- Simple_name ("A.B.C") => "C"
-- Simple_name ("A") => "A"
function Get_Head (The_Name : Name) return Simple_Name;
-- Returns only the first segment of a selected name.
-- Head ("A.B.C") => "A"
-- Head ("A") => "A"
function Get_Tail (The_Name : Name) return Name;
-- Removes the first segment from a selected name and returns the tail.
-- Tail ("A.B.C") => "B.C"
-- Tail ("A") => ""
function Expand (The_Name : Name;
Environment : Naming.Context := Default_Context;
Action_Id : Action.Id := Action.Null_Id;
Max_Wait : Duration := Default_Wait) return Name;
-- Expands any prefix characters in the name appropriately.
function Get_Full_Name (Entity : Directory.Declaration) return Name;
function Get_Full_Name (Entity : Directory.Object) return Name;
function Get_Full_Name (Entity : Directory.Version) return Name;
-- Computes the fully qualified Ada name for the entity.
function Get_Simple_Name (Entity : Declaration) return Simple_Name;
function Get_Simple_Name (Entity : Directory.Object) return Simple_Name;
function Get_Simple_Name
(Entity : Directory.Version) return Simple_Name;
-- Computes the simple Ada name for the entity.
function Unique_Full_Name (Entity : Declaration) return Name;
function Unique_Full_Name (Entity : Directory.Object) return Name;
function Unique_Full_Name (Entity : Directory.Version) return Name;
-- Get_Full_Name with 'body, 'n(), and 'v() attributes as needed.
function Unique_Simple_Name (Entity : Declaration) return Simple_Name;
function Unique_Simple_Name
(Entity : Directory.Object) return Simple_Name;
function Unique_Simple_Name
(Entity : Directory.Version) return Simple_Name;
-- Get_Simple_Name with 'body, 'n(), and 'v() attributes as needed.
function Get_Ada_Name (Entity : Declaration) return Name;
function Get_Ada_Name (Entity : Directory.Object) return Name;
function Get_Ada_Name (Entity : Directory.Version) return Name;
-- Similar to Get_Full_Name, but stops at libraries.
procedure Nickname (Def_Id : Directory.Declaration; Name : Simple_Name);
-- Overloaded Ada declarations can be given unique string names by
-- associating a unique nickname with each overloaded Def_Id. The given
-- Def_Id node must be open for update/overwrite to apply the nickname.
-- The Name string is either the null string or in the form of an Ada
-- simple name. The user-specified nickname must be in the form of an
-- Ada simple name. The user-defined nickname can be changed at any
-- time by assigning it a new name. A null string cancels any
-- user-defined nickname associated with the Id.
function Nickname (Def_Id : Directory.Declaration) return String;
-- Returns the user-defined nickname associated with Def_Id, if one has
-- been specified; returns the system-defined nickname otherwise.
function System_Nickname (Def_Id : Directory.Declaration) return String;
-- Returns the system-assigned nickname for the given Def_Id, whether
-- or not a user-defined nickname has been assigned. The
-- system-assigned nickname is the image of the ordinal position
-- (1-origin) of the def_id among its namesakes in its declarative
-- region.
function Is_Overloaded (Def_Id : Directory.Declaration) return Boolean;
-- returns true if the given Def_Id is an overloaded Ada declaration.
function Unique_Simple_Name (The_Name : Name) return Name;
-- Returns the last segment of a name (including attributes);
-- Get_Simple_Name strips the attributes
function Get_Class (The_Name : Name) return String;
-- Extracts the class name attribute from the last segment of
-- The_Name. The name of the class is returned if found. The result
-- is the null string, otherwise.
function Get_Version (The_Name : Name) return String;
-- Extracts the version name attribute from the last segment of
-- The_Name.
function Ineffable_Name (Entity : Directory.Version) return String;
-- Return as descriptive a name as possible for an object which
-- may or may not be part of the normal universe. The Resolve
-- procedures will not necessarily understand theses names.
-- A network object name consists of "!!", followed by a host
-- name, followed by either "." or "!", followed by the name
-- of an object within that host. A host name can be resolved
-- to a network name and host address using package Transport_Name.
function Is_Network_Name (The_Name : Name) return Boolean;
-- Return true iff the The_Name is a syntactically correct
-- network object name. The host name need not be defined.
function Network_Name_To_Host (The_Name : Name) return Name;
-- If not Is_Network_Name (The_Name) then return "".
-- Otherwise, return the host name part of the network object name,
-- without the leading "!!" or trailing punctuation "!" or ".".
-- The returned name is not neccessarily defined.
function Network_Name_To_Rest (The_Name : Name) return Name;
-- If not Is_Network_Name (The_Name) then return The_Name.
-- Otherwise, return the object name part of the network object name,
-- beginning with "!" (even if the original punctuation was ".").
-- The returned name does not neccessarily denote an extant object.
function Extended_Diagnosis
(Status : Name_Status;
Source : Naming.Name;
Environment : Naming.Context := Default_Context;
Deleted_Ok : Boolean := False;
Objects_Only : Boolean := True;
Heap : System.Segment := Job_Segment.Get;
Action_Id : Action.Id := Action.Null_Id;
Max_Wait : Duration := Default_Wait) return String;
-- Generates a subordinate clause, which could follow a conjunction
-- such as "because", that explains the reason the status was returned
-- by Resolve.
procedure Release (Iter : in out Iterator);
-- Release storage occupied by iterator. Released space will be
-- reused by subsequent Resolutions by the calling job. After
-- the call to Release, the iterator variable is unusable except as
-- an argument to Resolve.
function Get_Order (Iter : Iterator) return Directory.Subclass;
-- The Order (see below) of the default version of the object
-- referenced by the iterator expressed as a subclass.
end Naming;
----------------------------------------------------------------------
type Unit_Implementation is private;
type Conversion_Key_Implementation is private;
-- Private types required by Ada visibility and type completion rules.
-- No operations are provided on this type.
package Ada is
-- This package defines an Ada.Unit as a new Directory.Object.
-- This type represents the source of any separate Ada unit.
-- Type (class) specific operations on Ada Units are provided here.
-- See Ada_Manager to implement most operations.
subtype Stub is Diana.Tree;
-- A stub declaration or a nonterminal (insertion point).
subtype Unit is Unit_Implementation;
-- The managed object corresponding to the source for a separate
-- Ada unit. The corresponding declaration in the directory is
-- either a program unit stub or a library variable declaration.
function Hash (The_Unit : Ada.Unit) return Integer;
function Unique (The_Unit : Ada.Unit) return Long_Integer;
function Get_Unit (The_Object : Directory.Object) return Ada.Unit;
function Get_Object (The_Unit : Ada.Unit) return Directory.Object;
-- Conversions between Object and Unit.
subtype Version is Directory.Version;
-- The values (Versions) of a Unit; corresponds to Ada_Manager.Id.
function Get_Class return Directory.Class;
-- Returns the Class of Ada Units (Ada_manager.Class).
function Get_Subclass (Root : Diana.Tree) return Directory.Subclass;
-- Returns the subclass of the ada unit passed.
subtype Root is Diana.Tree;
subtype Roots is Diana.Temp_Seq;
-- The root node of the value of an Ada Unit, and a sequence of such.
subtype Any_Node is Diana.Tree;
-- Indicates a situation where any node within an Ada unit
-- may be used as a representative of the entire unit.
procedure Set_Root (New_Root : Root;
Status : out Error_Status;
Action_Id : Action.Id);
-- Establishes New_Root as the root of the containing Ada.Version.
-- The New_Root must not be void, and must be in a source unit,
-- else Illegal_operation. The unit must be open for update by
-- Action_Id, or open for update and Action_Id = Action.Null_Id;
procedure Get_Root (Node : Any_Node;
Result : out Root;
Status : out Error_Status);
-- Returns the Root of the unit represented by the Node.
procedure Get_Version (Node : Any_Node;
Result : out Ada.Version;
Status : out Error_Status);
-- Returns the Version containing the Node.
procedure Get_Unit (Node : Any_Node;
Result : out Ada.Unit;
Status : out Error_Status);
-- Returns the Unit containing the Node.
procedure Get_Parent (The_Unit : Ada.Version;
Result : out Ada.Version;
Status : out Error_Status;
Version : Version_Name := Default_Version;
Action_Id : Action.Id := Action.Null_Id;
Max_Wait : Duration := Default_Wait);
-- Returns the unit (version) containing the stub declaration
-- for The_Unit.
type Cg_Phase is range 0 .. 15;
procedure Get_Phase (The_Unit : Ada.Unit;
Result : out Cg_Phase;
Status : out Error_Status;
Version : Version_Name := Default_Version;
Action_Id : Action.Id := Action.Null_Id;
Max_Wait : Duration := Default_Wait);
procedure Set_Phase (The_Unit : Ada.Unit;
Phase : Cg_Phase;
Status : out Error_Status;
Version : Version_Name := Default_Version;
Action_Id : Action.Id := Action.Null_Id;
Max_Wait : Duration := Default_Wait);
subtype Conversion_Key is Conversion_Key_Implementation;
procedure Convert (Original : Diana.Tree;
Converted : out Diana.Tree;
Key : Conversion_Key;
Status : out Error_Status);
-- If the given tree is in one of the units recorded in the key,
-- then converts the tree to the other unit. If the tree is in
-- neither unit fails with Illegal_Operation. If the conversion
-- does not result in a valid tree node, then Consistency_Error.
function Nil return Conversion_Key;
function Is_Nil (Key : Conversion_Key) return Boolean;
function From_Segment (Key : Conversion_Key) return System.Segment;
function To_Segment (Key : Conversion_Key) return System.Segment;
type Open_Mode is --
(None, -- Mode None only applies to installed units.
-- There is no synchronization with mode None.
Read, -- Mode Read applies to either source or installed
-- units, and aquires a non-exclusive read lock
-- (exclusive of update, but not other readers).
Update -- Mode Update only applies to source units,
-- and acquires an exclusive update lock. Update
-- is exclusive of both readers and other updaters.
);
procedure Open (The_Unit : in out Ada.Version;
Mode : Open_Mode;
Result : out Root;
Key : out Conversion_Key;
Status : out Error_Status;
Action_Id : Action.Id;
Prevent_Backup : Boolean := False;
Override_Editor : Boolean := True;
Max_Wait : Duration := Default_Wait);
procedure Open (The_Unit : Ada.Unit;
Mode : Open_Mode;
Result : out Root;
Key : out Conversion_Key;
Status : out Error_Status;
Action_Id : Action.Id;
Version : Version_Name := Default_Version;
Prevent_Backup : Boolean := False;
Override_Editor : Boolean := True;
Max_Wait : Duration := Default_Wait);
procedure Open (The_Unit : Naming.Name;
Mode : Open_Mode;
Result : out Root;
Key : out Conversion_Key;
Status : out Error_Status;
Action_Id : Action.Id;
The_Context : Naming.Context := Naming.Default_Context;
Version : Version_Name := Default_Version;
Prevent_Backup : Boolean := False;
Override_Editor : Boolean := True;
Max_Wait : Duration := Default_Wait);
-- Returns the root of the separate tree designated by The_Unit.
-- Opens the unit with the specified access Mode for Action_id.
-- Opening installed units for Update is an Illegal_Operation.
-- Incompatible access modes result in queueing or Lock_Error.
-- Open may be called any number of times with the same action.
-- Opening for update after having opened for read produces a
-- conversion key for converting references between the old
-- (read only) tree and the new (writable) tree.
-- Open, Close and Save invoke policy specific pre and
-- post operations before and after execution.
procedure Save (The_Unit : Any_Node;
Status : out Error_Status;
Action_Id : Action.Id;
Immediate_Effect : Boolean := False;
Prevent_Backup : Boolean := False);
-- The unit must be open for update by the indicated action, else
-- Illegal_Operation. The current value of the unit is saved. If
-- Immediate_Effect, or when Action_Id is committed, the saved value
-- becomes the permanent value of the unit. Note that abandoning
-- Action_Id does not back out of a Save with Immediate_Effect.
-- Save with Immediate_Effect with make the_unit the default version.
-- Save will automatically update the Subclass of the Ada.Unit.
procedure Close (The_Unit : Any_Node;
Status : out Error_Status;
Action_Id : Action.Id;
Commit : Boolean := True;
Immediate_Effect : Boolean := False);
-- Closes the indicated unit, releasing access. If Commit then
-- changes become permanent and the_unit is made the default version,
-- else the previous (original or saved) value is restored.
-- It is an Illegal_Operation to close a unit not open by Action_Id.
-- Close will automatically update the Subclass of the Ada.Unit.
pragma Consume_Offset (3);
-- procedure Get_Image (The_Unit : Ada.Unit;
-- Result : out Directory.Version;
-- Status : out Error_Status;
-- Action_Id : Action.Id;
-- Version : Version_Name := Default_Version;
-- Max_Wait : Duration := Default_Wait);
-- -- Returns the file version which corresponds to the image.
procedure Reformat_Image (The_Unit : Ada.Unit;
Status : out Error_Status;
Action_Id : Action.Id := Action.Null_Id;
Version : Version_Name := Default_Version;
Prevent_Backup : Boolean := False;
Override_Editor : Boolean := True;
Heap : System.Segment := Job_Segment.Get;
Max_Wait : Duration := Default_Wait);
-- This procedure will cause an entirely new image for the
-- unit to be created. This operation will work on installed units.
procedure Set_Diana_Heap
(Unit_For_Allocators : Any_Node;
Status : out Error_Status;
Attr_Space_Class : String := "";
For_Job : Default.Process_Id := Default.Nil;
For_Task : Machine.Task_Id := Machine.Nil_Task);
-- Establishes the Unit which acts as the collection for allocators
-- in Diana operations performed by the designated Job or Task.
-- If only the Job is specified, sets the unit for the Job.
-- If only the Task is specified, sets the unit for the Task.
-- If both are specified, sets the unit for the both.
-- If neither are specified, sets the unit for the current Task.
procedure Get_Diana_Heap
(Result : out Root;
Status : out Error_Status;
For_Job : Default.Process_Id := Default.Nil;
For_Task : Machine.Task_Id := Machine.Nil_Task);
-- Returns the unit associated with the designated Task or Job.
-- If only the Job is specified, gets the unit for the Job.
-- If only the Task is specified, gets the unit for the Task.
-- If neither are specified, gets the unit for the current Task.
-- If both are specified, Illegal_Operation.
-- When retrieving the unit for a Task, if no unit has been
-- specified for the Task, return the one specified for the
-- Job which contains the Task.
type Heap_State is private;
function Save_Heap return Heap_State;
procedure Restore_Heap (With_State : Heap_State);
-- Permits tools to bracket calls to set/get diana_heap.
------------------------------------------------------------------
generic
Class_Name : String;
package Attributes is
-- This package implements permament user-defined attributes of
-- arbitrary types. Users may construct a class of attributes for
-- each tool (code generator, data flow analyzer, etc.).
-- The attribute values are stored, and accessed on a per unit
-- basis. Conceptually, for a class there can be a attribute
-- space for each Ada unit (version), storing the attributes
-- for that unit. The space must be created and open before
-- any attributes may be added.
-- Permanent attributes may only be applied to installed units,
-- demoting a unit from installed will implicitly destroy all
-- attribute spaces (with the same action).
procedure Create (Any_Node : Diana.Tree;
Action_Id : Action.Id;
Status : out Error_Status;
Max_Wait : Duration := Default_Wait);
procedure Destroy (Any_Node : Diana.Tree;
Action_Id : Action.Id;
Status : out Error_Status;
Max_Wait : Duration := Default_Wait);
function Has (Any_Node : Diana.Tree) return Boolean;
function Get_Segment (Any_Node : Diana.Tree) return System.Segment;
type Access_Mode is (Update, Read);
procedure Open (Any_Node : Diana.Tree;
Mode : Access_Mode;
Status : out Error_Status;
Action_Id : Action.Id;
Max_Wait : Duration := Default_Wait);
procedure Close (Any_Node : Diana.Tree;
Status : out Error_Status;
Action_Id : Action.Id);
--------------------------------------------------------------
generic
type Attribute_Value is private;
Default_Value : Attribute_Value;
Map_Size : Integer := 101;
package Attribute is
-- This generic is instantiated once for each (unmanaged) type
-- of attribute in this class.
type Name is private;
-- The class may include several attributes of the same type,
-- distinguished by their name.
function Nil return Name;
function Is_Nil (Attr : Name) return Boolean;
function Get_Name (Symbolic_Name : String) return Name;
-- Each attribute within a class must have a unique name.
-- The first (ever) call registers this attribute name with the
-- corresponding class and type. Subsequent calls verify that
-- the symbolic name matches the type signature recorded with
-- this name for the class.
function Get (On_Node : Diana.Tree; Attr : Name)
return Attribute_Value;
function Has (Node : Diana.Tree; Attr : Name) return Boolean;
procedure Add (On_Node : Diana.Tree;
Attr : Name;
Value : Attribute_Value);
procedure Remove (From_Node : Diana.Tree; Attr : Name);
private
type Attribute_Class is
record
Value : Integer := 0;
end record;
type Name is
record
Class : Attribute_Class;
Value : Integer := 0;
end record;
end Attribute;
--------------------------------------------------------------
generic
Object_Class : Directory.Class;
Map_Size : Integer := 101;
package Managed_Attribute is
-- This package supports attributes of managed types. The
-- values do not appear in the directory system (as declared
-- entities), but otherwise have all the properties of any
-- other directory object. The Ada manager ensures that all
-- attributes of managed types are destroyed when removed or
-- when the attribute space is destroyed.
type Name is private;
-- The class may include several attributes of managed types,
-- distinguished by their attribute name.
function Nil return Name;
function Is_Nil (Attr : Name) return Boolean;
function Get_Name (Symbolic_Name : String) return Name;
-- Each attribute within a class must have a unique name.
-- The first (ever) call registers this attribute name with the
-- corresponding class and type. Subsequent calls verify that
-- the symbolic name matches the object class specified on the
-- first call.
function Get (On_Node : Diana.Tree; Attr : Name)
return Directory.Object;
function Has (Node : Diana.Tree; Attr : Name) return Boolean;
procedure Add (On_Node : Diana.Tree;
Attr : Name;
Action_Id : Action.Id);
-- Implicitly creates an object of the appropriate class with
-- the Ada unit for On_Node as its parent.
procedure Remove (From_Node : Diana.Tree;
Attr : Name;
Action_Id : Action.Id);
-- Destroys the object which is the attribute value.
private
type Attribute_Class is
record
Value : Integer := 0;
end record;
type Name is
record
Class : Attribute_Class;
Value : Integer := 0;
end record;
end Managed_Attribute;
end Attributes;
pragma Consume_Offset (1);
procedure Get_Image (The_Unit : Ada.Unit;
Result : out Directory.Version;
Status : out Error_Status;
Action_Id : Action.Id := Action.Null_Id;
Version : Version_Name := Default_Version;
Max_Wait : Duration := Default_Wait);
-- Returns the file version which corresponds to the image.
-- Postponed from earlier.
function Get_Order (Root : Diana.Tree) return Directory.Subclass;
-- The Order (see below) of the unit expressed as a subclass.
end Ada;
----------------------------------------------------------------------
package Traversal is
-- Provides operations for traversing the Package Directory System
-- in a variety of ways. Note that Directory.Ada provides the
-- operations for going from an Ada.Unit or Ada.Version to the
-- actual Diana tree, and for going from any Diana node to the Unit
-- or Version. Directory.Ada (when used with Diana and various
-- utilities) also provides lower level operations for traversing the
-- Universe based on structural and semantic information.
procedure Get_Universe (Universe : out Ada.Unit;
Status : out Error_Status);
-- Returns the (somewhat special) Object corresponding to the
-- Root unit of the universe.
procedure Get_Subunit (Unit : Ada.Unit;
Subunit_Name : String;
Result : out Ada.Unit;
Status : out Error_Status;
Get_Body : Boolean := False);
-- Retrieve the named subunit.
procedure Get_Subobject (Unit : Ada.Unit;
Child_Name : String;
Result : out Directory.Object;
Status : out Error_Status);
-- Retrieve the named subobject.
procedure Get_Parent (The_Object : Directory.Object;
Result : out Ada.Unit;
Status : out Error_Status);
-- Returns the parent object for The_Object.
function Is_Visible_Part (The_Unit : Ada.Version) return Boolean;
function Is_Visible_Part
(The_Unit : Ada.Unit;
Version : Version_Name := Default_Version) return Boolean;
-- Determines whether the given unit corresponds to a visible part.
procedure Get_Other_Part (The_Unit : Ada.Version;
Complement : out Ada.Version;
Status : out Error_Status;
Action_Id : Action.Id := Action.Null_Id;
Max_Wait : Duration := Default_Wait);
procedure Get_Other_Part (The_Unit : Ada.Unit;
Complement : out Ada.Unit;
Status : out Error_Status;
Action_Id : Action.Id := Action.Null_Id;
Max_Wait : Duration := Default_Wait);
procedure Get_Other_Part (The_Unit : Declaration;
Complement : out Declaration;
Status : out Error_Status;
Action_Id : Action.Id := Action.Null_Id;
Max_Wait : Duration := Default_Wait);
-- Given the visible part, return the body, and vice versa.
-- Returns a nil unit if there is no complement.
procedure Get_Object (The_Declaration : Declaration;
Result : out Directory.Object;
Status : out Error_Status;
The_Class : Directory.Class := Nil;
Prevent_Create : Boolean := False;
Action_Id : Action.Id := Action.Null_Id;
Max_Wait : Duration := Default_Wait);
-- Given the declaration, returns the Object. If The_Declaration
-- does not correspond to a managed directory object, then fails
-- with consistency error.
procedure Get_Declaration (Root : Ada.Root;
Object_Name : String;
Result : out Declaration;
Status : out Error_Status;
Stubs_Only : Boolean := False);
-- Return the declaration with the corresponding name if it
-- appears in the unit. If Stubs_Only is true, then only
-- declarations of managed objects and stubs will be returned.
procedure Get_Declaration (The_Object : Directory.Object;
Parent : Ada.Version;
Result : out Declaration;
Status : out Error_Status;
Action_Id : Action.Id := Action.Null_Id;
Max_Wait : Duration := Default_Wait);
procedure Get_Declaration
(The_Object : Directory.Object;
Result : out Declaration;
Status : out Error_Status;
Parent_Version : Version_Name := Default_Version;
Action_Id : Action.Id := Action.Null_Id;
Max_Wait : Duration := Default_Wait);
-- Returns the declaration corresponding to this object.
-- If the parent is a source unit and Action_Id is not
-- the Null_Id, will acquire read access to the parent
-- Ada version containing the stub declaration.
procedure Get_Version (The_Object : Directory.Object;
Result : out Directory.Version;
Status : out Error_Status;
Version : Version_Name := Default_Version;
Action_Id : Action.Id := Action.Null_Id;
Max_Wait : Duration := Default_Wait);
-- Retrieves the specified version of The_Object, used
-- wherever one must get from an object to a specific version.
procedure Get_Object (The_Version : Version;
Result : out Directory.Object;
Status : out Error_Status;
Action_Id : Action.Id := Action.Null_Id;
Max_Wait : Duration := Default_Wait);
-- Returns the Object which has The_Version as one of its versions.
type Object_Iterator is private;
-- For iterating over all of the managed objects in an Ada unit.
-- Includes Objects for which no versions have been created.
-- This form of iterator is much less efficient than the
-- Subunit_Iterator or Subobject_Iterator.
procedure Init (The_Unit : Ada.Version;
Action_Id : Action.Id;
Iterator : out Object_Iterator;
Status : out Error_Status;
Max_Wait : Duration := Default_Wait);
-- Initializes the iteration over the ada unit, aquiring
-- read access to the Ada.Version if a Action_Id is not null.
procedure Next (Iterator : in out Object_Iterator);
function Value (Iterator : Object_Iterator) return Directory.Object;
function Done (Iterator : Object_Iterator) return Boolean;
type Subunit_Iterator is private;
-- For iterating over subunits, independent of version.
procedure Init (The_Unit : Ada.Unit;
Action_Id : Action.Id;
Iterator : out Subunit_Iterator;
Status : out Error_Status;
Max_Wait : Duration := Default_Wait);
-- Initializes the iteration over The_Unit. Gets a read lock
-- on the object.
procedure Next (Iterator : in out Subunit_Iterator);
function Value (Iterator : Subunit_Iterator) return Ada.Unit;
function Done (Iterator : Subunit_Iterator) return Boolean;
type Version_Iterator is private;
-- For iterating over all versions of some object.
procedure Init (The_Object : Directory.Object;
Action_Id : Action.Id;
Versions : out Version_Iterator;
Status : out Error_Status;
Max_Wait : Duration := Default_Wait;
Forward : Boolean := True);
-- Initializes the iteration over The_Unit. Gets a read lock
-- on the object.
procedure Next (Versions : in out Version_Iterator);
function Value (Versions : Version_Iterator) return Version;
function Value (Versions : Version_Iterator) return Version_Name;
function Done (Versions : Version_Iterator) return Boolean;
type Associated_Object_Iterator is limited private;
-- For iterating over all of the associated objects in an Ada unit.
-- Includes Attribute spaces, list file directory.objects, etc.
procedure Init (The_Version : Ada.Version;
Iterator : out Associated_Object_Iterator;
Status : out Error_Status;
Action_Id : Action.Id := Action.Null_Id;
Max_Wait : Duration := Default_Wait);
-- Initializes the iteration over the ada unit.
procedure Next (Iterator : in out Associated_Object_Iterator);
function Value (Iterator : Associated_Object_Iterator) return Version;
function Done (Iterator : Associated_Object_Iterator) return Boolean;
type Subobject_Iterator is private;
-- For iterating over subobjects, independent of version or class.
procedure Init (The_Unit : Ada.Unit;
Action_Id : Action.Id;
Iterator : out Subobject_Iterator;
Status : out Error_Status;
Max_Wait : Duration := Default_Wait);
-- Initializes the iteration over The_Unit. Gets a read lock
-- on the object.
procedure Next (Iterator : in out Subobject_Iterator);
function Value (Iterator : Subobject_Iterator) return Directory.Object;
function Done (Iterator : Subobject_Iterator) return Boolean;
end Traversal;
----------------------------------------------------------------------
package Declaration_Operations is
-- Operations to promote and demote declarations. Promoting
-- declarations moves them "up" to higher declaration states
-- (toward Coded), while demotion moves declarations
-- "down" to lower declaration states (toward Nonexistent).
type Declaration_State is
(Nonexistent,
Archived, -- Text-only source, must be parsed.
Source, -- Source, may be ready to be compiled.
Installed, -- Semantically consistent.
Coded -- Has been code generated.
);
procedure Get_Unit_State (For_Unit : Ada.Version;
Result : out Declaration_State;
Status : out Error_Status;
Action_Id : Action.Id := Action.Null_Id;
Max_Wait : Duration := Default_Wait);
procedure Get_Unit_State (For_Unit : Ada.Unit;
Result : out Declaration_State;
Status : out Error_Status;
Version : Version_Name := Default_Version;
Action_Id : Action.Id := Action.Null_Id;
Max_Wait : Duration := Default_Wait);
procedure Get_Unit_State (For_Unit : Ada.Root;
Result : out Declaration_State;
Status : out Error_Status;
Action_Id : Action.Id := Action.Null_Id;
Max_Wait : Duration := Default_Wait);
-- For the unit return the current declaration state.
function Is_Source (For_Unit : Ada.Version) return Boolean;
function Is_Installed (For_Unit : Ada.Version) return Boolean;
function Is_Source (For_Node : Ada.Any_Node) return Boolean;
function Is_Installed (For_Node : Ada.Any_Node) return Boolean;
-- Fast forms.
procedure Promote (Stub : in out Ada.Stub;
Errors : out Error_Messages.Errors;
Change_Impact : out Ada.Roots;
Modified_Units : out Diana.Temp_Seq;
Status : out Error_Status;
Goal_State : Declaration_State := Installed;
Switches : Switches_Type := Directory.Nil;
Change_Limits : Object_Set.Set := Object_Set.Nil;
Limit_Type : Change_Limit := Object_Only;
Action_Id : Action.Id := Action.Null_Id;
Max_Wait : Duration := Default_Wait);
-- If the stub is actually a program unit stub declaration (rather
-- than a nonterminal), attempts to promote the associated subunit
-- to the Target_State. A subunit may not be promoted to a state
-- higher than that of the stub declaration, except that a subunit
-- may be coded before the unit containing the stub is coded. If
-- not yet installed, the subunit may actually be a program unit
-- declaration rather than a subunit comp_unit, in which case
-- the comp_unit shell will be constructed automatically, using
-- the declaration as the AS_Subunit_Body.
-- If the stub is a nonterminal (insertion_point), then attempts
-- to insert the associated tree at the nonterminal, promoting
-- it to the state of the enclosing unit (ignores Target_State).
-- If the associated unit is a subunit, a package (body or
-- real spec, not rename or instantiation), a task body, or a
-- subprogram body then a stub is constructed and promoted in
-- place of the nonterminal, and then the separate unit is promoted
-- as if it were a subunit (see above), using the specified
-- Target_State. Otherwise, the associated unit must be either a
-- declaration, a statement, or a list of either statements or
-- declarations, which will be inserted in place of the nonterminal
-- and promoted to the state of the enclosing unit, and then destroyed.
-- See Directory.Control point for limitations on when incremental
-- operations are available. Basically, incremental installation
-- is available everywhere, incremental coding is available only
-- rarely.
-- May fail with semantic, obsolescence or various other errors.
procedure Demote (Location : Diana.Tree;
Errors : out Error_Messages.Errors;
Result : out Diana.Tree;
Change_Impact : out Ada.Roots;
Modified_Units : out Diana.Temp_Seq;
Status : out Error_Status;
Count : Natural := 1;
Goal_State : Declaration_State := Source;
Switches : Switches_Type := Directory.Nil;
Change_Limits : Object_Set.Set := Object_Set.Nil;
Limit_Type : Change_Limit := Object_Only;
Action_Id : Action.Id := Action.Null_Id;
Max_Wait : Duration := Default_Wait);
-- Location may be an item (or def_id for an item), statement,
-- comp_unit (a diana.dn_comp_unit or the root of the unit), or
-- nonterminal. In the first two of those cases, the Count
-- parameter may be used to demote a sequence of declarations
-- or statements, which will be demoted to source in a separate
-- unit associated with a nonterminal left at the point of the
-- demotion (unless the Target_State is Nonexistent). If a program
-- unit stub with an associated subunit is demoted in this manner,
-- the stub is replaced by a nonterminal which is now associated
-- with the subunit and the stub no longer exists.
-- For comp_units, any target state may be specified, and the
-- unit will be demoted to that state. For items, the current
-- unit must either be in a control point or must be in the
-- state Installed. For statements, the current unit must
-- be Installed. For both items and statements, the final
-- state must be either Source or Nonexistent.
-- Stubs may only be demoted individually, with Count = 1.
-- Nonterminals may only be demoted individually, and only to the
-- Nonexistent state.
-- This operation will fail with obsolescence error if any
-- declarations (including installed subunits) depend upon
-- demoted declarations.
procedure Open_Insertion_Point (Decl_Stm_S : Diana.Tree;
Position : Natural := Default_Position;
Status : out Error_Status;
Result : out Diana.Tree;
Action_Id : Action.Id := Action.Null_Id;
Max_Wait : Duration := Default_Wait);
-- Returns the Dn_Nonterminal inserted at the given position
-- (A position of 0 implies before the first element of the list).
-- If Decl_Stm_S is in a source unit, this operation will open the
-- unit for update with the given action (else Lock_Error).
-- Within source it is not legal to associate a unit with a
-- nonterminal, although a nonterminal in a source unit may
-- already have an associated object which was created when
-- the unit was installed. The nonterminal is given a unique
-- name which identifies any associated unit.
procedure Will_Be_A_Comp_Unit (Root : Diana.Tree;
Result : out Boolean;
Status : out Error_Status);
-- A predicate which determines if the root of a child unit will
-- be promoted in place or made into a comp_unit.
procedure Get_Unit_State (For_Unit : Ada.Root;
Result : out Declaration_State;
Status : out Error_Status;
Key : Directory.Target_Key;
Action_Id : Action.Id := Action.Null_Id;
Max_Wait : Duration := Default_Wait);
-- This special form of Get_Unit_State is intended for use
-- by people who already have a target_key, and don't (or can't)
-- suffer through access_control to look one up in a switch file.
procedure Promote (Stub : in out Ada.Stub;
Preserve_Partial_Info : in out Boolean;
Errors : out Error_Messages.Errors;
Change_Impact : out Ada.Roots;
Modified_Units : out Diana.Temp_Seq;
Status : out Error_Status;
Goal_State : Declaration_State := Installed;
Switches : Switches_Type := Directory.Nil;
Change_Limits : Object_Set.Set := Object_Set.Nil;
Limit_Type : Change_Limit := Object_Only;
Action_Id : Action.Id := Action.Null_Id;
Max_Wait : Duration := Default_Wait);
-- If Preserve_Partial_Info is passed in true, directory will try
-- to arrange things so that the action passed can be committed even
-- if an error occurs. If this is the case, Preserve_Partial_Info will
-- return True. Otherwise the action should be abandoned on failure.
procedure Open_Insertion_Point
(Decl_Stm_S : Diana.Tree;
Position : Natural := Default_Position;
Errors : out Error_Messages.Errors;
Change_Impact : out Ada.Roots;
Modified_Units : out Diana.Temp_Seq;
Status : out Error_Status;
Result : out Diana.Tree;
Switches : Switches_Type := Directory.Nil;
Change_Limits : Object_Set.Set := Object_Set.Nil;
Limit_Type : Change_Limit := Object_Only;
Action_Id : Action.Id := Action.Null_Id;
Max_Wait : Duration := Default_Wait);
-- A new, improved version of Open_Insertion_Point which
-- allows the code generator to return status.
procedure Demote_List (Items : Diana.Temp_Seq;
Errors : out Error_Messages.Errors;
Result : out Diana.Temp_Seq;
Change_Impact : out Ada.Roots;
Modified_Units : out Diana.Temp_Seq;
Status : out Error_Status;
Goal_State : Declaration_State := Source;
Switches : Switches_Type := Directory.Nil;
Change_Limits : Object_Set.Set := Object_Set.Nil;
Limit_Type : Change_Limit := Object_Only;
Action_Id : Action.Id := Action.Null_Id;
Max_Wait : Duration := Default_Wait);
end Declaration_Operations;
----------------------------------------------------------------------
package Object_Operations is
-- Operations to Create, Copy and Destroy Objects.
procedure Create (The_Object : Directory.Object;
Result : out Version;
Errors : out Error_Messages.Errors;
Change_Impact : out Ada.Roots;
Modified_Units : out Diana.Temp_Seq;
Status : out Error_Status;
Initial_Value : Version_Name := Nil_Version;
The_Version : Version_Name := New_Version;
Switches : Switches_Type := Directory.Nil;
Change_Limits : Object_Set.Set := Object_Set.Nil;
Limit_Type : Change_Limit := Object_Only;
Action_Id : Action.Id := Action.Null_Id;
Max_Wait : Duration := Default_Wait);
procedure Create (Object_Name : Naming.Simple_Name;
Parent : Ada.Unit;
Result : out Version;
Errors : out Error_Messages.Errors;
Change_Impact : out Ada.Roots;
Modified_Units : out Diana.Temp_Seq;
Status : out Error_Status;
Object_Class : Class := Nil;
Object_Subclass : Subclass := Nil;
Initial_Value : Version_Name := Nil_Version;
The_Version : Version_Name := New_Version;
Parent_Version : Version_Name := Default_Version;
Position : Natural := Default_Position;
Switches : Switches_Type := Directory.Nil;
Change_Limits : Object_Set.Set := Object_Set.Nil;
Limit_Type : Change_Limit := Object_Only;
Action_Id : Action.Id := Action.Null_Id;
Max_Wait : Duration := Default_Wait);
procedure Create (Object_Name : Naming.Name;
Result : out Version;
Errors : out Error_Messages.Errors;
Change_Impact : out Ada.Roots;
Modified_Units : out Diana.Temp_Seq;
Status : out Error_Status;
Object_Class : Class := Nil;
Object_Subclass : Subclass := Nil;
The_Context : Naming.Context :=
Naming.Default_Context;
Initial_Value : Version_Name := Nil_Version;
The_Version : Version_Name := New_Version;
Position : Natural := Default_Position;
Switches : Switches_Type := Directory.Nil;
Change_Limits : Object_Set.Set := Object_Set.Nil;
Limit_Type : Change_Limit := Object_Only;
Action_Id : Action.Id := Action.Null_Id;
Max_Wait : Duration := Default_Wait);
-- For The_Object, creates a new version. The The_Version
-- parameter determines the name of the newly created version.
-- An existing version may be designated as the Initial_Value.
-- If The_Version designates an existing version, or Initial_Value
-- designates a non-existant one, then Illegal_Operation. If the
-- named entity is not declared first create a declaration (at
-- the given Position in the parent declarative part) with the given
-- name, using the class to determine the type. If there is
-- no declaration and the class is nil, then Consistency_Error.
-- When creating an Ada object where no initial value is specified,
-- creates an unit with a skeletal completion of the stub
-- declaration.
-- Non-ada objects (including libraries) can only be created
-- immediately inside libraries.
procedure Copy (Source : Version;
Destination : in out Version;
Errors : out Error_Messages.Errors;
Change_Impact : out Ada.Roots;
Modified_Units : out Diana.Temp_Seq;
Status : out Error_Status;
Make_Default : Boolean := True;
Switches : Switches_Type := Directory.Nil;
Change_Limits : Object_Set.Set := Object_Set.Nil;
Limit_Type : Change_Limit := Object_Only;
Action_Id : Action.Id := Action.Null_Id;
Max_Wait : Duration := Default_Wait);
procedure Copy (Source : Directory.Object;
Destination_Object : Directory.Object;
Errors : out Error_Messages.Errors;
Change_Impact : out Ada.Roots;
Modified_Units : out Diana.Temp_Seq;
Status : out Error_Status;
Source_Version : Version_Name := Default_Version;
Destination_Version : Version_Name := New_Version;
Make_Default : Boolean := True;
Switches : Switches_Type := Directory.Nil;
Change_Limits : Object_Set.Set := Object_Set.Nil;
Limit_Type : Change_Limit := Object_Only;
Action_Id : Action.Id := Action.Null_Id;
Max_Wait : Duration := Default_Wait);
procedure Copy (Source : Directory.Object;
Destination_Parent : Ada.Unit;
Destination_Name : Naming.Simple_Name;
Result : out Directory.Object;
Errors : out Error_Messages.Errors;
Change_Impact : out Ada.Roots;
Modified_Units : out Diana.Temp_Seq;
Status : out Error_Status;
Source_Version : Version_Name := Default_Version;
Destination_Version : Version_Name := New_Version;
Parent_Version : Version_Name := Default_Version;
Make_Default : Boolean := True;
Position : Natural := Default_Position;
Switches : Switches_Type := Directory.Nil;
Change_Limits : Object_Set.Set := Object_Set.Nil;
Limit_Type : Change_Limit := Object_Only;
Action_Id : Action.Id := Action.Null_Id;
Max_Wait : Duration := Default_Wait);
procedure Copy (Source : Naming.Name;
Destination : Naming.Name;
Result : out Directory.Object;
Errors : out Error_Messages.Errors;
Change_Impact : out Ada.Roots;
Modified_Units : out Diana.Temp_Seq;
Status : out Error_Status;
Source_Context : Naming.Context :=
Naming.Default_Context;
Source_Version : Version_Name := Default_Version;
Destination_Context : Naming.Context :=
Naming.Default_Context;
Destination_Version : Version_Name := New_Version;
Make_Default : Boolean := True;
Position : Natural := Default_Position;
Switches : Switches_Type := Directory.Nil;
Change_Limits : Object_Set.Set := Object_Set.Nil;
Limit_Type : Change_Limit := Object_Only;
Action_Id : Action.Id := Action.Null_Id;
Max_Wait : Duration := Default_Wait);
-- Copies the value. Creates an entirely new declaration and object
-- at the destination if one did not exist. If the declaration
-- existed, but the specified Destination_Version did not, creates
-- a new version of the object. If the destination version already
-- exists, overwrites the old value with the new. Copied Ada
-- units are source only, regardless of the state of the Source.
-- Copies only the Source object (no sub-objects).
-- A Version_Name of All_Versions may be used with copy, causing
-- all versions of the object to be copied.
procedure Destroy (The_Version : Version;
Errors : out Error_Messages.Errors;
Change_Impact : out Ada.Roots;
Modified_Units : out Diana.Temp_Seq;
Status : out Error_Status;
Switches : Switches_Type := Directory.Nil;
Change_Limits : Object_Set.Set := Object_Set.Nil;
Limit_Type : Change_Limit := Object_Only;
Action_Id : Action.Id := Action.Null_Id;
Max_Wait : Duration := Default_Wait);
procedure Destroy (The_Object : Directory.Object;
Errors : out Error_Messages.Errors;
Change_Impact : out Ada.Roots;
Modified_Units : out Diana.Temp_Seq;
Status : out Error_Status;
Version : Version_Name := Default_Version;
Switches : Switches_Type := Directory.Nil;
Change_Limits : Object_Set.Set := Object_Set.Nil;
Limit_Type : Change_Limit := Object_Only;
Action_Id : Action.Id := Action.Null_Id;
Max_Wait : Duration := Default_Wait);
procedure Destroy (The_Object : Naming.Name;
Errors : out Error_Messages.Errors;
Change_Impact : out Ada.Roots;
Modified_Units : out Diana.Temp_Seq;
Status : out Error_Status;
The_Context : Naming.Context :=
Naming.Default_Context;
Version : Version_Name := Default_Version;
Switches : Switches_Type := Directory.Nil;
Change_Limits : Object_Set.Set := Object_Set.Nil;
Limit_Type : Change_Limit := Object_Only;
Action_Id : Action.Id := Action.Null_Id;
Max_Wait : Duration := Default_Wait);
-- Destroys the specified version of the object. Specifying
-- All_Versions will destroy all of the versions of the object.
-- If the target of any destroy is an installed Ada unit, first
-- attempts to withdraw the unit, then (if there were no errors)
-- performs the destroy.
-- A Version_Name of All_Versions may be used with Destroy, causing
-- all versions of the object to be Destroyed.
procedure Create_Package
(Name : Naming.Simple_Name;
Parent : Ada.Unit;
Result : out Ada.Unit;
Status : out Error_Status;
Part : Package_Part := Visible_Part;
Parent_Version : Version_Name := Default_Version;
Spec_Position : Natural := Default_Position;
Body_Position : Natural := Default_Position;
Action_Id : Action.Id := Action.Null_Id;
Max_Wait : Duration := Default_Wait);
-- Creates a source version of a package.
procedure Recreate (The_Object : Directory.Object;
Initial_Value : Directory.Version;
Status : out Error_Status;
The_Version : Version_Name := New_Version;
Action_Id : Action.Id := Action.Null_Id;
Max_Wait : Duration := Default_Wait);
procedure Recreate (Object_Name : Naming.Simple_Name;
Parent : Ada.Unit;
Initial_Value : Directory.Version;
Status : out Error_Status;
The_Version : Version_Name := New_Version;
Parent_Version : Version_Name := Default_Version;
Position : Natural := Default_Position;
Action_Id : Action.Id := Action.Null_Id;
Max_Wait : Duration := Default_Wait);
procedure Recreate (Object_Name : Naming.Name;
Initial_Value : Directory.Version;
Status : out Error_Status;
The_Context : Naming.Context :=
Naming.Default_Context;
The_Version : Version_Name := New_Version;
Position : Natural := Default_Position;
Action_Id : Action.Id := Action.Null_Id;
Max_Wait : Duration := Default_Wait);
-- For The_Object, associates the specified Initial_Value as
-- a version of that object. The Initial_Value must be an
-- unrooted object, which has the null object as its parent.
-- The Version parameter determines the name of the version.
-- If the given Initial_Value is already a version of The_Object,
-- then the recreate is a no-op. If the named entity is not
-- declared first create a declaration (at the given Position
-- in the parent declarative part) with the given name, using
-- the class to determine the type. If there is no declaration
-- and the class is nil, then Consistency_Error.
procedure Is_Frozen (The_Object : Directory.Object;
Result : out Boolean;
Status : out Error_Status;
Action_Id : Action.Id := Action.Null_Id;
Max_Wait : Duration := Default_Wait);
-- Test whether an object is frozen.
procedure Freeze_Object (The_Object : Directory.Object;
Status : out Error_Status;
Action_Id : Action.Id := Action.Null_Id;
Max_Wait : Duration := Default_Wait);
procedure Freeze_Unit (The_Unit : Ada.Unit;
Recursive : Boolean;
Status : out Error_Status;
Action_Id : Action.Id := Action.Null_Id;
Max_Wait : Duration := Default_Wait);
-- Freeze an object or a unit (and its children which are in the
-- same control point) so that it cannot be changed.
procedure Unfreeze_Object (The_Object : Directory.Object;
Status : out Error_Status;
Action_Id : Action.Id := Action.Null_Id;
Max_Wait : Duration := Default_Wait);
procedure Unfreeze_Unit (The_Unit : Ada.Unit;
Recursive : Boolean;
Status : out Error_Status;
Action_Id : Action.Id := Action.Null_Id;
Max_Wait : Duration := Default_Wait);
-- Unfreeze an object or a unit (and its children which are in
-- the same control point) so that it can be manipulated normally.
procedure Set_Default (The_Object : Directory.Object;
New_Default : Directory.Version;
Errors : out Error_Messages.Errors;
Change_Impact : out Ada.Roots;
Modified_Units : out Diana.Temp_Seq;
Status : out Error_Status;
Switches : Switches_Type := Directory.Nil;
Change_Limits : Object_Set.Set := Object_Set.Nil;
Limit_Type : Change_Limit := Object_Only;
Action_Id : Action.Id := Action.Null_Id;
Max_Wait : Duration := Default_Wait);
-- Change the Default_Version of an object. Naturally, New_Default
-- must be either an existing version of The_Object or Nil.
procedure Expunge_Object
(The_Object : Directory.Object;
Status : out Error_Status;
Retention_Count : Integer := Default_Retention_Count;
Action_Id : Action.Id := Action.Null_Id;
Max_Wait : Duration := Default_Wait);
procedure Expunge_Unit
(The_Unit : Ada.Unit;
Recursive : Boolean;
Status : out Error_Status;
Retention_Count : Integer := Default_Retention_Count;
Action_Id : Action.Id := Action.Null_Id;
Max_Wait : Duration := Default_Wait);
-- Expunge (destroy) excess deleted versions or an object or unit
-- (and its children which are in the same control point).
procedure Get_Retention_Count (The_Object : Directory.Object;
Result : out Natural;
Status : out Error_Status;
Action_Id : Action.Id := Action.Null_Id;
Max_Wait : Duration := Default_Wait);
procedure Set_Retention_Count
(The_Object : Directory.Object;
Retention_Count : Integer := Default_Retention_Count;
Status : out Error_Status;
Action_Id : Action.Id := Action.Null_Id;
Max_Wait : Duration := Default_Wait);
-- Manipulate the number of deleted versions to retain.
-- Setting to a negative number (e.g., Default_Retention_Count) means
-- set to the parent's retention count.
procedure Create_Backup (The_Object : Directory.Object;
Status : out Error_Status;
Version : Version_Name := Default_Version;
Action_Id : Action.Id := Action.Null_Id;
Max_Wait : Duration := Default_Wait);
-- Increment The_Version's version number, and copy it to a new
-- version with the original number.
procedure Set_Subclass (The_Object : Directory.Object;
The_Subclass : Directory.Subclass;
Status : out Error_Status;
Action_Id : Action.Id := Action.Null_Id;
Max_Wait : Duration := Default_Wait);
procedure Reset_Subclass (The_Object : Directory.Object;
Status : out Error_Status;
Action_Id : Action.Id := Action.Null_Id;
Max_Wait : Duration := Default_Wait);
-- Change the subclass of an object. The new subclass must still
-- have the same parent class as the object.
-- Reset_Subclass will attempt to deduce the proper subclass.
-- If the proper subclass isn't obvious, nil will be used.
function No (An_Object : Directory.Object;
Action_Id : Action.Id;
Max_Wait : Duration) return Boolean;
generic
Subclass_Name : String;
Parent_Class : Directory.Class;
with function Is_Mine (An_Object : Directory.Object;
Action_Id : Action.Id;
Max_Wait : Duration) return Boolean is No;
package Registered_Subclass is
function Value return Directory.Subclass;
end Registered_Subclass;
-- Returns Nil if instantiation is illegal.
procedure Is_Slushy (The_Object : Directory.Object;
Result : out Boolean;
Status : out Error_Status;
Action_Id : Action.Id := Action.Null_Id;
Max_Wait : Duration := Default_Wait);
-- Test whether an object is slushy.
procedure Set_Slushy (The_Object : Directory.Object;
Value : Boolean;
Status : out Error_Status;
Action_Id : Action.Id := Action.Null_Id;
Max_Wait : Duration := Default_Wait);
-- Make an object slushy or normal.
procedure Is_Controlled (The_Object : Directory.Object;
Result : out Boolean;
Status : out Error_Status;
Action_Id : Action.Id := Action.Null_Id;
Max_Wait : Duration := Default_Wait);
-- Test whether an object is controlled.
procedure Set_Controlled (The_Object : Directory.Object;
Value : Boolean;
Status : out Error_Status;
Action_Id : Action.Id := Action.Null_Id;
Max_Wait : Duration := Default_Wait);
-- Make an object controlled or normal.
procedure Rename (The_Object : Directory.Object;
New_Parent : Directory.Object;
New_Name : Naming.Simple_Name;
Errors : out Error_Messages.Errors;
Change_Impact : out Ada.Roots;
Modified_Units : out Diana.Temp_Seq;
Status : out Error_Status;
Change_Limits : Object_Set.Set := Object_Set.Nil;
Limit_Type : Change_Limit := Object_Only;
Action_Id : Action.Id := Action.Null_Id;
Max_Wait : Duration := Default_Wait);
procedure Rename (The_Object : Naming.Name;
New_Name : Naming.Name;
Result : out Directory.Object;
Errors : out Error_Messages.Errors;
Change_Impact : out Ada.Roots;
Modified_Units : out Diana.Temp_Seq;
Status : out Error_Status;
Change_Limits : Object_Set.Set := Object_Set.Nil;
Limit_Type : Change_Limit := Object_Only;
Action_Id : Action.Id := Action.Null_Id;
Max_Wait : Duration := Default_Wait);
procedure Rename (The_Object : Directory.Object;
New_Parent : Directory.Object;
New_Name : Naming.Simple_Name;
Status : out Error_Status;
Action_Id : Action.Id := Action.Null_Id;
Max_Wait : Duration := Default_Wait);
procedure Rename (The_Object : Naming.Name;
New_Name : Naming.Name;
Status : out Error_Status;
Action_Id : Action.Id := Action.Null_Id;
Max_Wait : Duration := Default_Wait);
-- Give The Object a New Name. If The Object is a world, or The
-- Object is in the same world as its New Parent, no data is
-- transferred; otherwise Rename is equivalent (literally) to a Copy
-- followed by a Destroy, moving The Object and all versions.
-- Directories can be renamed if no data transfer is required.
-- The last two forms give less information when the Rename
-- fails; they are more appropriate for renaming non-Ada
-- objects.
end Object_Operations;
----------------------------------------------------------------------
package Policy is
type Open_Mode is (None, Read, Update, Overwrite);
procedure Pre_Open (The_Object : Directory.Object;
The_Version : in out Directory.Version;
Mode : Policy.Open_Mode;
Status : out Error_Status;
Action_Id : Action.Id;
Max_Wait : Duration;
Prevent_Backup : Boolean);
procedure Post_Open (The_Object : Directory.Object;
The_Version : Directory.Version;
Mode : Policy.Open_Mode;
Status : out Error_Status;
Action_Id : Action.Id;
Max_Wait : Duration);
procedure Pre_Save (The_Object : Directory.Object;
The_Version : Directory.Version;
Status : out Error_Status;
Action_Id : Action.Id;
Max_Wait : Duration;
Prevent_Backup : Boolean);
procedure Post_Save (The_Object : Directory.Object;
The_Version : Directory.Version;
Status : out Error_Status;
Action_Id : Action.Id;
Max_Wait : Duration);
procedure Pre_Close (The_Object : Directory.Object;
The_Version : Directory.Version;
Commit : Boolean;
Status : out Error_Status;
Action_Id : Action.Id;
Max_Wait : Duration);
procedure Post_Close (The_Object : Directory.Object;
The_Version : Directory.Version;
Commit : Boolean;
Status : out Error_Status;
Action_Id : Action.Id;
Max_Wait : Duration);
procedure Compilation_Info (The_Object : Directory.Object;
Result : out Target_Key;
Switches : in out Switches_Type;
Status : out Error_Status;
Action_Id : Action.Id;
Max_Wait : Duration);
end Policy;
----------------------------------------------------------------------
package Control_Point is
subtype Unit is Ada.Unit;
-- A unit corresponding to the root of a control_point.
-- A control_point corresponds either to a library and all of
-- the library units in that library, or to a package in the
-- package hierarchy and all of the subunits of that package
-- (not including nested control_points and their contents).
type Kind is (Library_Control_Point, Directory_Control_Point, None);
function Image (Cp_Kind : Kind) return String;
function Value (Cp_Kind : String) return Kind;
function Get_Class return Directory.Class;
-- Returns the Class of Libraries (Directory_Manager.Class).
function Is_Control_Point (Unit : Ada.Unit) return Boolean;
function Is_Control_Point (Unit : Directory.Object) return Boolean;
-- Returns true IFF the indicated Unit is the root of a control_point.
function Is_World (Unit : Ada.Unit) return Boolean;
function Is_World (Unit : Directory.Object) return Boolean;
function Is_Directory (Unit : Ada.Unit) return Boolean;
function Is_Directory (Unit : Directory.Object) return Boolean;
function Kind_Of_Control_Point
(Any_Object : Directory.Object) return Control_Point.Kind;
-- Returns None if Unit is not a control point.
function Kind_Of_Associated_Control_Point
(Any_Object : Directory.Object) return Control_Point.Kind;
function Associated_Control_Point
(The_Object : Directory.Object) return Control_Point.Unit;
function Associated_Control_Point
(The_Object : Directory.Object) return Directory.Object;
-- Returns the nearest enclosing control_point unit which contains
-- the specified object.
procedure Enclosing_World (The_Object : Directory.Object;
The_World : out Control_Point.Unit;
Status : out Error_Status);
procedure Enclosing_Directory (The_Object : Directory.Object;
The_Directory : out Control_Point.Unit;
Status : out Error_Status);
procedure Set_Switch_Object (Unit : Control_Point.Unit;
The_File : Directory.Object;
Status : out Error_Status;
Action_Id : Action.Id := Action.Null_Id;
Max_Wait : Duration := Default_Wait);
procedure Get_Switch_Object (Unit : Control_Point.Unit;
The_File : out Directory.Object;
Status : out Error_Status;
Action_Id : Action.Id := Action.Null_Id;
Max_Wait : Duration := Default_Wait);
-- Used to manipulate the file object used to store switch files.
subtype Volume is Natural range 0 .. 31;
-- Used to represent a disk volume.
function Nil return Volume;
function Is_Nil (The_Volume : Volume) return Boolean;
function Get_Volume
(The_Control_Point : Control_Point.Unit) return Volume;
procedure Create (Name : Naming.Simple_Name;
Kind : Control_Point.Kind;
Parent : Control_Point.Unit;
Result : out Control_Point.Unit;
Status : out Error_Status;
The_Subclass : Subclass := Nil;
Vol : Volume := Nil;
Spec_Position : Natural := Default_Position;
Body_Position : Natural := Default_Position;
Part : Package_Part := Both_Parts;
Parameters : Directory.Object := Nil;
Action_Id : Action.Id := Action.Null_Id;
Max_Wait : Duration := Default_Wait);
-- Creates a new control_point at the indicated position.
-- If an appropriate stub already exists and has no directory
-- object associated with it, that stub will be reused rather
-- than creating a new one.
-- All objects contained within the control_point are created on the
-- volume associated with the World and all such objects abide
-- by the policies associated with the world.
procedure Compact (Unit : Control_Point.Unit;
Status : out Error_Status;
Action_Id : Action.Id := Action.Null_Id;
Max_Wait : Duration := Default_Wait);
-- This experimental procedure will attempt to reduce the
-- size of the diana tree for a control point. Some programs
-- may break because the diana.tree for all stubs in the unit
-- will be changed by this operation.
pragma Consume_Offset;
procedure Get_Target_Key (The_Object : Directory.Object;
The_Key : out Directory.Target_Key;
Status : out Error_Status;
Action_Id : Action.Id := Action.Null_Id;
Max_Wait : Duration := Default_Wait);
procedure Get_Target_Key (The_Object : Directory.Version;
The_Key : out Directory.Target_Key;
Status : out Error_Status;
Action_Id : Action.Id := Action.Null_Id;
Max_Wait : Duration := Default_Wait);
procedure Get_Target_Key (The_Object : Ada.Root;
The_Key : out Directory.Target_Key;
Status : out Error_Status;
Action_Id : Action.Id := Action.Null_Id;
Max_Wait : Duration := Default_Wait);
-- Returns the target key associated with the given object.
-- Returns the nil target key if one has not yet been assigned.
-- A read lock on the enclosing world object is obtained if a
-- non-null action id is provided
procedure Parent_World (The_Object : Directory.Object;
The_World : out Control_Point.Unit;
Status : out Error_Status);
procedure Parent_World (The_Object : Directory.Object;
The_World : out Directory.Object;
Status : out Error_Status);
procedure Parent_Library (The_Object : Directory.Object;
The_Library : out Control_Point.Unit;
Status : out Error_Status);
procedure Parent_Library (The_Object : Directory.Object;
The_Library : out Directory.Object;
Status : out Error_Status);
-- Returns the world (or library) that encloses the given
-- object. Unlike Enclosing_World (Enclosing_Directory), the
-- Parent_World (Parent_Library) of a world (library) is NOT the world
-- (library) itself, but the world (library) that properly
-- contains the world (library). The object returned by
-- Enclosing_Library may be a world or a directory. The parent
-- world/directory of the universe object is Directory.Nil.
end Control_Point;
----------------------------------------------------------------------
type Statistics_Data_Implementation is private;
package Statistics is
subtype User is Directory.Object;
subtype Session is Directory.Object;
subtype Data is Statistics_Data_Implementation;
procedure Get_Data (The_Object : Directory.Object;
The_Data : out Data;
Status : out Error_Status;
Version : Version_Name := Default_Version;
Action_Id : Action.Id := Action.Null_Id;
Max_Wait : Duration := Default_Wait);
procedure Get_Data (The_Version : Version;
The_Data : out Data;
Status : out Error_Status;
Action_Id : Action.Id := Action.Null_Id;
Max_Wait : Duration := Default_Wait);
function Time_Of_Last_Update (The_Data : Data) return Calendar.Time;
function Time_Of_Last_Read (The_Data : Data) return Calendar.Time;
function Time_Of_Creation (The_Data : Data) return Calendar.Time;
function Last_Updater (The_Data : Data) return User;
function Session_Of_Last_Updater (The_Data : Data) return Session;
function Last_Reader (The_Data : Data) return User;
function Session_Of_Last_Reader (The_Data : Data) return Session;
function Creator (The_Data : Data) return User;
function Session_Of_Creator (The_Data : Data) return Session;
function Total_Size (The_Data : Data) return Long_Integer;
function Header_Size (The_Data : Data) return Natural;
function Data_Size (The_Data : Data) return Long_Integer;
procedure Get_Last_Edit_Time (The_Unit : Ada.Unit;
The_Time : out Calendar.Time;
Status : out Error_Status;
Version : Version_Name := Default_Version;
Action_Id : Action.Id := Action.Null_Id;
Max_Wait : Duration := Default_Wait);
procedure Get_Last_Edit_Time (The_Version : Ada.Version;
The_Time : out Calendar.Time;
Status : out Error_Status;
Action_Id : Action.Id := Action.Null_Id;
Max_Wait : Duration := Default_Wait);
procedure Get_Last_Edit_Time (The_Unit : Ada.Any_Node;
The_Time : out Calendar.Time;
Status : out Error_Status);
type Object_Data is private;
procedure Get_Object_Data
(The_Object : Directory.Object;
The_Data : out Object_Data;
Status : out Directory.Error_Status;
Library_Info : Boolean := False;
Action_Id : Action.Id := Action.Null_Id;
Max_Wait : Duration := Directory.Default_Wait);
-- Obtains information about the given object. If Library_Info is
-- true, the switch file and target key controlling the object
-- are returned for any object. If Library_Info is false, this
-- information is returned only for library (nee control point)
-- objects.
function Object_Parent (The_Data : Object_Data) return Directory.Object;
-- Only the universe object has no parent
function Object_Class (The_Data : Object_Data) return Directory.Class;
function Object_Subclass (The_Data : Object_Data)
return Directory.Subclass;
-- The subclass of the default version of the object
function Object_Volume (The_Data : Object_Data)
return Control_Point.Volume;
-- Volume the object resides on.
function Object_Library (The_Data : Object_Data)
return Directory.Object;
-- The library that immediately contains the object.
function Object_Library_Kind
(The_Data : Object_Data) return Control_Point.Kind;
-- Directory or World: If the data is for a library object then
-- this function returns the kind of that library. If the object
-- is not a library, this function returns the kind of the
-- enclosing library.
function Object_Retention_Count (The_Data : Object_Data) return Natural;
function Object_Is_Frozen (The_Data : Object_Data) return Boolean;
function Object_Id_Slushy (The_Data : Object_Data) return Boolean;
function Object_Is_Controlled (The_Data : Object_Data) return Boolean;
function Object_Is_Library (The_Data : Object_Data) return Boolean;
function Object_Child_Count (The_Data : Object_Data) return Natural;
-- Number of immediate subcomponents of the object. Includes
-- deleted-but-not-destroyed objects.
function Object_Version_Count (The_Data : Object_Data) return Natural;
-- Number of extant versions of the object; includes the default
-- version, if any.
function Object_Default_Version
(The_Data : Object_Data) return Directory.Version;
-- Returns the Nil version if Object has not default (i.e., is
-- deleted).
function Object_Unit_State
(The_Data : Object_Data)
return Directory.Declaration_Operations.Declaration_State;
-- For Ada objects only. Returns the unit state for the default
-- version of the object.
function Object_Switch_File
(The_Data : Object_Data) return Directory.Object;
-- Switch file associated with the Object's library
function Object_Target_Key (The_Data : Object_Data)
return Directory.Target_Key;
-- Target Key associated with the Object.
function Object_Is_Slushy (The_Data : Object_Data) return Boolean
renames Object_Id_Slushy;
-- Compatible fix to typo earlier in spec.
function Object_Order (The_Data : Object_Data)
return Directory.Subclass;
-- The Order (see below) of the default version of the object
-- expressed as a subclass.
end Statistics;
pragma Consume_Offset (1);
-- An object also has a CATEGORY, which is orthogonal to its subclass.
type Category is (Resident, Gateway, Spare2, Spare3);
procedure Set_Category (Object : Directory.Object;
Category : Directory.Category;
Status : out Error_Status;
Action_Id : Action.Id := Action.Null_Id;
Max_Wait : Duration := Default_Wait);
-- Sets the category for the default version. Its Subclass is
-- unaffected.
function Get_Category (Object : Directory.Object) return Category;
function Has_Category
(Object : Directory.Object; Category : Directory.Category)
return Boolean;
function Is_Resident (Object : Directory.Object;
Category : Directory.Category := Directory.Resident)
return Boolean renames Directory.Has_Category;
function Is_Gateway (Object : Directory.Object;
Category : Directory.Category := Directory.Gateway)
return Boolean renames Directory.Has_Category;
-- The unique classification of an object according to its category
-- and subclass is called its ORDER.
type Order is
record
Category : Directory.Category;
Subclass : Directory.Subclass;
end record;
procedure Set_Order (Object : Directory.Object;
Order : Directory.Order;
Status : out Error_Status;
Action_Id : Action.Id := Action.Null_Id;
Max_Wait : Duration := Default_Wait);
-- Sets the Categrory and Subclass of the default version of the
-- specified object.
function Get_Order (Object : Directory.Object) return Directory.Order;
-- The Order of an object can be expressed as a Subclass. All procedures
-- and functions that accept a parameter of type Directory.Subclass
-- actually interpret their parameters as Orders. But, all functions that
-- previously returned Directory.Subclass (except Subclass_Value and
-- Registered_Subclass.Value), return a pure Subclass, NOT an Order. New
-- functions (all called Get_Order) have been added to return the Order as
-- a subclass, in these cases. Subclass_Value and Registered_Subclass.-
-- Value also return Subclass values that refect both category and subclass.
-- Our expectation is that most components of the system will want
-- to continue to traffic in pure subclasses and only a few clients
-- will have to deal with orders.
function Get_Order (Object : Directory.Object) return Directory.Subclass;
function Order_Subclass (Order : Directory.Subclass)
return Directory.Subclass;
function Order_Category (Order : Directory.Subclass)
return Directory.Category;
function Convert (Order : Directory.Order) return Directory.Subclass;
function Convert (Order : Directory.Subclass) return Directory.Order;
pragma Inline (Convert, Order_Category, Order_Subclass);
end Directory;