0024428: Implementation of LGPL license
[occt.git] / src / AdvApp2Var / AdvApp2Var_SysBase.hxx
1 // Copyright (c) 1999-2014 OPEN CASCADE SAS
2 //
3 // This file is part of Open CASCADE Technology software library.
4 //
5 // This library is free software; you can redistribute it and / or modify it
6 // under the terms of the GNU Lesser General Public version 2.1 as published
7 // by the Free Software Foundation, with special exception defined in the file
8 // OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
9 // distribution for complete text of the license and disclaimer of any warranty.
10 //
11 // Alternatively, this file may be used under the terms of Open CASCADE
12 // commercial license or contractual agreement.
13
14 // AdvApp2Var_SysBase.hxx
15 #ifndef AdvApp2Var_SysBase_HeaderFile
16 #define AdvApp2Var_SysBase_HeaderFile
17
18 #include <Standard_Macro.hxx>
19 #include <AdvApp2Var_Data_f2c.hxx>
20 #if _MSC_VER
21 #include <stddef.h>
22 #else
23 #include <stdint.h>
24 #endif
25
26 class AdvApp2Var_SysBase {
27  public:
28   Standard_EXPORT AdvApp2Var_SysBase();
29   Standard_EXPORT ~AdvApp2Var_SysBase();
30   
31   //
32   Standard_EXPORT int mainial_();
33
34   Standard_EXPORT static int macinit_(int *, 
35                                       int *);
36   //
37   Standard_EXPORT int mcrdelt_(integer *iunit, 
38                                       integer *isize, 
39                                       void *t, 
40                                       intptr_t *iofset, 
41                                       integer *iercod);
42
43   Standard_EXPORT static int mcrfill_(integer *size, 
44                                       void *tin, 
45                                       void *tout);
46
47   Standard_EXPORT int mcrrqst_(integer *iunit, 
48                                       integer *isize, 
49                                       void *t, 
50                                       intptr_t *iofset, 
51                                       integer *iercod);
52   Standard_EXPORT static integer mnfndeb_();
53
54   Standard_EXPORT static integer mnfnimp_();
55   Standard_EXPORT static int do__fio(); 
56   Standard_EXPORT static int do__lio ();
57   Standard_EXPORT static int e__wsfe ();
58   Standard_EXPORT static int e__wsle ();
59   Standard_EXPORT static int s__wsfe ();
60   Standard_EXPORT static int s__wsle ();
61   Standard_EXPORT int macrai4_(integer *nbelem, 
62                                       integer *maxelm, 
63                                       integer *itablo,
64                                       intptr_t *iofset,
65                                       integer *iercod);
66   Standard_EXPORT int macrar8_(integer *nbelem, 
67                                       integer *maxelm,
68                                       doublereal *xtablo, 
69                                       intptr_t *iofset, 
70                                       integer *iercod);
71   Standard_EXPORT int macrdi4_(integer *nbelem, 
72                                       integer *maxelm, 
73                                       integer *itablo, 
74                                       intptr_t *iofset, 
75                                       integer *iercod);
76
77   Standard_EXPORT int macrdr8_(integer *nbelem,
78                                       integer *maxelm, 
79                                       doublereal *xtablo, 
80                                       intptr_t *iofset, 
81                                       integer *iercod);
82   Standard_EXPORT static int maermsg_(const char *cnompg, 
83                                       integer *icoder, 
84                                       ftnlen cnompg_len);
85   Standard_EXPORT static int maitbr8_(integer *itaill, 
86                                       doublereal *xtab, 
87                                       doublereal *xval);
88   Standard_EXPORT static int maovsr8_(integer *ivalcs);
89   Standard_EXPORT static int mgenmsg_(const char *nomprg, 
90                                       ftnlen nomprg_len);
91
92   Standard_EXPORT static int mgsomsg_(const char *nomprg, 
93                                       ftnlen nomprg_len);
94   Standard_EXPORT static void miraz_(integer *taille,
95                                      void *adt);
96   Standard_EXPORT static int msifill_(integer *nbintg, 
97                                       integer *ivecin,
98                                       integer *ivecou);
99   Standard_EXPORT static int msrfill_(integer *nbreel, 
100                                       doublereal *vecent,
101                                       doublereal * vecsor);
102   Standard_EXPORT static int mswrdbg_(const char *ctexte, 
103                                       ftnlen ctexte_len);
104   Standard_EXPORT static void mvriraz_(integer *taille,
105                                        void*adt);
106   
107 private:
108   int macrchk_();
109   int mcrlist_(integer *ier) const;
110
111   /* Maximum number of allowed allocation requests.
112      Currently the maximum known number of requests is 7 - see
113      AdvApp2Var_MathBase::mmresol_(). So the current value is a safe margin and
114      a reasonable balance to not provoke stack overflow (especially in
115      multi-threaded execution). Previous number of 1000 was excessive but
116      tolerable when used for static memory.
117   */
118   static const int MAX_ALLOC_NB = 32;
119   
120   enum {
121     static_allocation = 0, /* indicates static allocation, currently not used */
122     heap_allocation   = 1  /* indicates heap allocation */
123   };
124   
125   /* Describes an individual memory allocation request.
126      See format description in the AdvApp2Var_SysBase.cxx.
127      The field order is preserved and the sizes are chosen to minimize
128      memory footprint. Fields containing address have the intptr_t type
129      for easier arithmetic and to avoid casts in the source code.
130
131      No initialization constructor should be provided to avoid wasting
132      time when allocating a field mcrgene_.
133   */
134   struct mitem {
135     unsigned char   prot;
136     unsigned char   unit; //unit of allocation: 1, 2, 4 or 8
137     integer         reqsize;
138     intptr_t        loc;
139     intptr_t        offset;
140     unsigned char   alloctype; // static_allocation or heap_allocation
141     integer         size;
142     intptr_t        addr;
143     integer         userzone; //not used
144     intptr_t        startaddr;
145     intptr_t        endaddr;
146     integer         rank;
147   };
148   
149   struct {
150     mitem           icore[MAX_ALLOC_NB];
151     integer         ncore;
152     unsigned char   lprot;
153   } mcrgene_;
154
155   /* Contains statistics on allocation requests.
156      Index 0 corresponds to static_allocation, 1 - to heap allocation.
157      nrqst - number of allocation requests;
158      ndelt - number of deallocation requests;
159      nbyte - current number of allocated bytes;
160      mbyte - maximum number of ever allocated bytes.
161   */
162   struct {
163     integer nrqst[2], ndelt[2], nbyte[2], mbyte[2];
164   } mcrstac_; 
165 };
166
167 #endif