File: node137.html

package info (click to toggle)
babel 0.10.2-1
  • links: PTS
  • area: contrib
  • in suites: sarge
  • size: 43,932 kB
  • ctags: 29,707
  • sloc: java: 74,695; ansic: 73,142; cpp: 40,649; sh: 18,411; f90: 10,062; fortran: 6,727; python: 6,406; makefile: 3,866; xml: 118; perl: 48
file content (172 lines) | stat: -rw-r--r-- 6,843 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">

<!--Converted with LaTeX2HTML 2002-2-1 (1.70)
original version by:  Nikos Drakos, CBLU, University of Leeds
* revised and updated by:  Marcus Hennecke, Ross Moore, Herb Swan
* with significant contributions from:
  Jens Lippmann, Marek Rouchal, Martin Wilck and others -->
<HTML>
<HEAD>
<TITLE>Implementing Classes in FORTRAN 77</TITLE>
<META NAME="description" CONTENT="Implementing Classes in FORTRAN 77">
<META NAME="keywords" CONTENT="users_guide">
<META NAME="resource-type" CONTENT="document">
<META NAME="distribution" CONTENT="global">

<META NAME="Generator" CONTENT="LaTeX2HTML v2002-2-1">
<META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">

<LINK REL="STYLESHEET" HREF="users_guide.css">

<LINK REL="next" HREF="node138.html">
<LINK REL="previous" HREF="node136.html">
<LINK REL="up" HREF="node131.html">
<LINK REL="next" HREF="node138.html">
</HEAD>

<BODY >

<DIV CLASS="navigation"><!--Navigation Panel-->
<A NAME="tex2html2757"
  HREF="node138.html">
<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next" SRC="next.png"></A> 
<A NAME="tex2html2751"
  HREF="node131.html">
<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up" SRC="up.png"></A> 
<A NAME="tex2html2745"
  HREF="node136.html">
<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous" SRC="prev.png"></A> 
<A NAME="tex2html2753"
  HREF="node14.html">
<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents" SRC="contents.png"></A> 
<A NAME="tex2html2755"
  HREF="node317.html">
<IMG WIDTH="43" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="index" SRC="index.png"></A> 
<BR>
<B> Next:</B> <A NAME="tex2html2758"
  HREF="node138.html">Accessing SIDL Arrays From</A>
<B> Up:</B> <A NAME="tex2html2752"
  HREF="node131.html">FORTRAN 77 Bindings</A>
<B> Previous:</B> <A NAME="tex2html2746"
  HREF="node136.html">Invoking Babel to generate</A>
 &nbsp; <B>  <A NAME="tex2html2754"
  HREF="node14.html">Contents</A></B> 
 &nbsp; <B>  <A NAME="tex2html2756"
  HREF="node317.html">Index</A></B> 
<BR>
<BR></DIV>
<!--End of Navigation Panel-->

<H1><A NAME="SECTION03360000000000000000"></A>
<A NAME="7307"></A>
<BR>
Implementing Classes in FORTRAN 77
</H1>

<P>
Much of the information from the previous section is 
pertinent to implementing a SIDL class in FORTRAN 77. 
The types of the arguments are as indicated in Table&nbsp;<A HREF="node133.html#tbl:f77:types">8.1</A>.
Your implementation can call other SIDL methods in which case follow 
the rules for client calls.

<P>
You should invoke Babel:
<BLOCKQUOTE>
<TT> <TT>%</TT> <TT><B>babel -server=f77 file.sidl</B></TT>
<BR>
</TT></BLOCKQUOTE>or simply
<BLOCKQUOTE>
<TT> <TT>%</TT> <TT><B>babel -s=f77 file.sidl</B></TT>
<BR>
</TT></BLOCKQUOTE>
<P>
This will create a babel.make, numerous C headers, numerous C source files 
and some FORTRAN 77 source files. 
Your job is to fill in the FORTRAN 77 source files with the implementation of the methods. 
The files you need to edit all end with <TT>_Impl.f</TT>. 
All your changes to the file should be made between code splicer pairs. 
Code between splicer pairs will be retained by subsequent invocations of Babel; 
code outside splicer pairs is not. 
Here is an example of a code splicer pair. 
In this example, you would replace the line 
"C Insert extra code here... " with your lines of code.

<P>
<BR>
<PRE  CLASS="verbatim">C       DO-NOT-DELETE splicer.begin(_miscellaneous_code_start)
C       Insert extra code here...
C       DO-NOT-DELETE splicer.end(_miscellaneous_code_start)
</PRE></td></tr></table></blockquote>
<P>
Each _Impl.f file contains numerous empty subroutines. 
Each subroutine that you must implement is partially implemented. 
The <TT>SUBROUTINE</TT> statement is written, and the types of the arguments 
have been declared. 
You must provide the body of each subroutine that implements the expected behavior 
of the method.

<P>
There are two implicit methods (i.e. methods that did not appear in
the SIDL file) that must also be implemented.  The <TT>_ctor()</TT>
method is a constructor function that is run whenever an object is
created. It's purpose is to initialize the object to make it ready for
any of the other method calls.  The <TT>_dtor()</TT> method is a
destructor function that is run whenever an object is destroyed. The
destructor's purpose is to free any resources allocated by the object.
If the object has no state, these functions are typically empty.

<P>
The SIDL IOR keeps a pointer (i.e. C void *) for each object that is
intended to hold a pointer to the object's internal data.  The FORTRAN
77 skeleton provides two functions that the FORTRAN 77 developer will
need to use to access the private pointer.  The name of the function
is derived from the fully qualified type name as follows.  Replace
periods with underscores and append <TT>__get_data_f</TT> or
<TT>__set_data_f</TT>.  The first argument is the object pointer
(i.e. self), and the second argument is an opaque . These arguments
are 64 bit integers in FORTRAN 77, but the number of bits actually
stored by the IOR is determined by the sizeof(void *).

<P>
Babel/SIDL does not provide a low level mechanism for FORTRAN 77 to
allocate memory to use for the private data pointer; however, there is
an example of a FORTRAN 77 object with state in
Section&nbsp;<A HREF="node139.html#sec:F77:state">8.8</A>.

<P>

<DIV CLASS="navigation"><HR>
<!--Navigation Panel-->
<A NAME="tex2html2757"
  HREF="node138.html">
<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next" SRC="next.png"></A> 
<A NAME="tex2html2751"
  HREF="node131.html">
<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up" SRC="up.png"></A> 
<A NAME="tex2html2745"
  HREF="node136.html">
<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous" SRC="prev.png"></A> 
<A NAME="tex2html2753"
  HREF="node14.html">
<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents" SRC="contents.png"></A> 
<A NAME="tex2html2755"
  HREF="node317.html">
<IMG WIDTH="43" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="index" SRC="index.png"></A> 
<BR>
<B> Next:</B> <A NAME="tex2html2758"
  HREF="node138.html">Accessing SIDL Arrays From</A>
<B> Up:</B> <A NAME="tex2html2752"
  HREF="node131.html">FORTRAN 77 Bindings</A>
<B> Previous:</B> <A NAME="tex2html2746"
  HREF="node136.html">Invoking Babel to generate</A>
 &nbsp; <B>  <A NAME="tex2html2754"
  HREF="node14.html">Contents</A></B> 
 &nbsp; <B>  <A NAME="tex2html2756"
  HREF="node317.html">Index</A></B> </DIV>
<!--End of Navigation Panel-->
<ADDRESS>
<br><br>babel-0.10.2<br>users_guide Last Modified 2005-03-23<br><br><a href="http://www.llnl.gov/CASC/components">http://www.llnl.gov/CASC/components</a><br><a href="mailto:components@llnl.gov">components@llnl.gov</a>
</ADDRESS>
</BODY>
</HTML>