0024157: Parallelization of assembly part of BO
[occt.git] / src / IFSelect / IFSelect_ShareOutResult.cdl
1 -- Created on: 1992-11-17
2 -- Created by: Christian CAILLET
3 -- Copyright (c) 1992-1999 Matra Datavision
4 -- Copyright (c) 1999-2012 OPEN CASCADE SAS
5 --
6 -- The content of this file is subject to the Open CASCADE Technology Public
7 -- License Version 6.5 (the "License"). You may not use the content of this file
8 -- except in compliance with the License. Please obtain a copy of the License
9 -- at http://www.opencascade.org and read it completely before using this file.
10 --
11 -- The Initial Developer of the Original Code is Open CASCADE S.A.S., having its
12 -- main offices at: 1, place des Freres Montgolfier, 78280 Guyancourt, France.
13 --
14 -- The Original Code and all software distributed under the License is
15 -- distributed on an "AS IS" basis, without warranty of any kind, and the
16 -- Initial Developer hereby disclaims all such warranties, including without
17 -- limitation, any warranties of merchantability, fitness for a particular
18 -- purpose or non-infringement. Please see the License for the specific terms
19 -- and conditions governing the rights and limitations under the License.
20
21
22
23 class ShareOutResult  from IFSelect
24
25     ---Purpose : This class gives results computed from a ShareOut : simulation
26     --           before transfer, helps to list entities ...
27     --           Transfer itself will later be performed, either by a
28     --           TransferCopy to simply divide up a file, or a TransferDispatch
29     --           which can be parametred with more details
30
31 uses AsciiString from TCollection, SequenceOfInteger from TColStd,
32      InterfaceModel,   EntityIterator,   CopyTool,
33      Graph,  SubPartsIterator, ShareOut, Dispatch, PacketList
34
35 raises NoSuchObject, InterfaceError
36
37 is
38
39     Create (sho : mutable ShareOut; mod : InterfaceModel) returns ShareOutResult;
40     ---Purpose : Creates a ShareOutResult from a ShareOut, to work on a Model
41     --           (without any more precision; uses Active Protocol)
42
43     Create (sho : mutable ShareOut; G : Graph) returns ShareOutResult;
44     ---Purpose : Creates a ShareOutResult from a ShareOut, to work on a Graph
45     --           already computed, which defines the Input Model and can
46     --           specialize some Entities
47
48     Create (disp : Dispatch; mod : InterfaceModel) returns ShareOutResult;
49     ---Purpose : Creates a ShareOutResult from a unique Dispatch, to work on
50     --           a Model. As if it was a ShareOut with only one Dispatch
51     --           (without any more precision; uses Active Protocol)
52     --           Allows to compute the effect of a single Dispatch
53
54     Create (disp : Dispatch; G : Graph) returns ShareOutResult;
55     ---Purpose : Creates a ShareOutResult from a unique Dispatch, to work on
56     --           a Graph. As if it was a ShareOut with only one Dispatch
57     --           Allows to compute the effect of a single Dispatch
58
59     ShareOut (me) returns mutable ShareOut;
60     ---Purpose : Returns the ShareOut used to create the ShareOutResult
61     --           if creation from a Dispatch, returns a Null Handle
62
63
64     Graph (me) returns Graph;
65     ---Purpose : Returns the Graph used to create theShareOutResult
66     ---C++ : return const &
67
68     Reset (me : in out);
69     ---Purpose : Erases computed data, in order to command a new Evaluation
70
71     Evaluate (me : in out);
72     ---Purpose : Evaluates the result of a ShareOut : determines Entities to be
73     --           forgotten by the ShareOut, Entities to be transferred several
74     --           times (duplicated), prepares an iteration on the packets to be
75     --           produced
76     --           Called the first time anyone question is asked, or after a
77     --           call to Reset. Works by calling the method Prepare.
78
79         -- --   Simulation Results    -- --
80
81     Packets (me : in out; complete : Boolean = Standard_True) returns PacketList;
82     ---Purpose : Returns the list of recorded Packets, under two modes :
83     --           - <complete> = False, the strict definition of Packets, i.e.
84     --             for each one, the Root Entities, to be explicitely sent
85     --           - <complete> = True (Default), the completely evaluated list,
86     --             i.e. which really gives the destination of each entity :
87     --             this mode allows to evaluate duplications
88     --           Remark that to send packets, iteration remains preferable
89     --           (file names are managed)
90
91     NbPackets (me : in out) returns Integer;
92     ---Purpose : Returns the total count of produced non empty packets
93     --           (in out : calls Evaluate as necessary)
94
95         --  --    Transfer Operation    -- --
96
97     Prepare (me : in out);
98     ---Purpose : Prepares the iteration on the packets
99     --           This method is called by Evaluate, but can be called anytime
100     --           The iteration consists in taking each Dispatch of the ShareOut
101     --           beginning by the first one, compute its packets, then iterate
102     --           on these packets. Once all these packets are iterated, the
103     --           iteration passes to the next Dispatch, or stops.
104     --           For a creation from a unique Dispatch, same but with only
105     --           this Dispatch.
106     --           Each packet can be listed, or really transferred (producing
107     --           a derived Model, from which a file can be generated)
108     --           
109     --           Prepare sets the iteration to the first Dispatch, first Packet
110
111     More (me : in out) returns Boolean;
112     ---Purpose : Returns True if there is more packets in the current Dispatch,
113     --           else if there is more Dispatch in the ShareOut
114
115     Next (me : in out);
116     ---Purpose : Passes to the next Packet in the current Dispatch, or if there
117     --           is none, to the next Dispatch in the ShareOut
118
119     NextDispatch (me : in out);
120     ---Purpose : Passes to the next Dispatch, regardless about remaining packets
121
122     Dispatch (me) returns Dispatch;
123     ---Purpose : Returns the current Dispatch
124
125     DispatchRank (me) returns Integer;
126     ---Purpose : Returns the Rank of the current Dispatch in the ShareOut
127     --           Returns Zero if there is none (iteration finished)
128
129     PacketsInDispatch (me; numpack, nbpacks : out Integer);
130     ---Purpose : Returns Number (rank) of current Packet in current Dispatch,
131     --           and total count of Packets in current Dispatch, as arguments
132
133     PacketRoot (me : in out) returns EntityIterator  raises NoSuchObject;
134     ---Purpose : Returns the list of Roots of the current Packet (never empty)
135     --           (i.e. the Entities to be themselves asked for transfer)
136     --           Error if there is none (iteration finished)
137
138     PacketContent (me : in out) returns EntityIterator  raises NoSuchObject;
139     ---Purpose : Returns the complete content of the current Packet (i.e.
140     --           with shared entities, which will also be put in the file)
141
142     FileName (me) returns AsciiString from TCollection;
143     ---Purpose : Returns the File Name which corresponds to current Packet
144     --           (computed by ShareOut)
145     --           If current Packet has no associated name (see ShareOut),
146     --           the returned value is Null
147
148
149 fields
150
151     theshareout : ShareOut;
152     thedispatch : Dispatch;
153     theeval     : Boolean;
154     thedispnum  : Integer;  -- rank of current dispatch in ShareOut
155     thepacknum  : Integer;  -- global rank of packet in the result
156     thepackdisp : Integer;  -- rank of packet in Dispatch
157     thenbindisp : Integer;  -- count of packets in Dispatch
158     thedisplist : SequenceOfInteger from TColStd;
159     thegraph    : Graph             is protected;
160     thedispres  : SubPartsIterator  is protected;
161
162 end ShareOutResult;