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>
<B> <A NAME="tex2html2754"
HREF="node14.html">Contents</A></B>
<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 <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 <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>
<B> <A NAME="tex2html2754"
HREF="node14.html">Contents</A></B>
<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>
|