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
|
<!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 SIDL Classes in C++</TITLE>
<META NAME="description" CONTENT="Implementing SIDL Classes in C++">
<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="node129.html">
<LINK REL="previous" HREF="node127.html">
<LINK REL="up" HREF="node120.html">
<LINK REL="next" HREF="node129.html">
</HEAD>
<BODY >
<DIV CLASS="navigation"><!--Navigation Panel-->
<A NAME="tex2html2625"
HREF="node129.html">
<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next" SRC="next.png"></A>
<A NAME="tex2html2619"
HREF="node120.html">
<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up" SRC="up.png"></A>
<A NAME="tex2html2613"
HREF="node127.html">
<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous" SRC="prev.png"></A>
<A NAME="tex2html2621"
HREF="node14.html">
<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents" SRC="contents.png"></A>
<A NAME="tex2html2623"
HREF="node317.html">
<IMG WIDTH="43" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="index" SRC="index.png"></A>
<BR>
<B> Next:</B> <A NAME="tex2html2626"
HREF="node129.html">Accessing SIDL Arrays From</A>
<B> Up:</B> <A NAME="tex2html2620"
HREF="node120.html">C++ Bindings</A>
<B> Previous:</B> <A NAME="tex2html2614"
HREF="node127.html">Invoking Babel to generate</A>
<B> <A NAME="tex2html2622"
HREF="node14.html">Contents</A></B>
<B> <A NAME="tex2html2624"
HREF="node317.html">Index</A></B>
<BR>
<BR></DIV>
<!--End of Navigation Panel-->
<H1><A NAME="SECTION03280000000000000000"></A>
<A NAME="6654"></A>
<BR>
Implementing SIDL Classes in C++
</H1>
Much of the information from the previous section is pertinent to
implementing a SIDL class in C++.
The types of the arguments are as indicated in Table <A HREF="node122.html#tbl:cxx:types">7.1</A>.
Your implementation can call other SIDL methods, in which case follow
the rules for client calls.
<P>
To create the implementation, you must first have a valid SIDL file,
then invoke Babel as follows:
<P>
<BLOCKQUOTE>
<TT> <TT>%</TT> <TT><B>babel -server=C++ file.sidl</B></TT>
<BR>
</TT></BLOCKQUOTE>or simply
<BLOCKQUOTE>
<TT> <TT>%</TT> <TT><B>babel -sC++ file.sidl</B></TT>
<BR>
</TT></BLOCKQUOTE>
<P>
This will create a makefile fragment called babel.make,
several C headers and source files, and numerous C++ header and source files.
To create a working implementation, the only files that need to be hand-edited
are the C++ "Impl" files (header and source files that end in
<TT>_Impl.hh</TT> or <TT>_Impl.cc</TT>).
All your additions to this file should be made between code splicer pairs.
Code splicing is a technique Babel uses to preserve hand-edited code between
multiple invocations of Babel.
This allows a developer to refine their SIDL file without ruining all their
previous implementations.
Code between splicer pairs will be retained by subsequent invocations of Babel;
code outside splicer pairs is not.
<P>
Here is an example of a code splicer pair in C++.
In this example, you would replace the line "// Insert code here... "
with your implementation.
<P>
<BR>
<PRE CLASS="verbatim">void MyPackage::MyClass::myMethod() {
// DO-NOT-DELETE splicer.begin(MyPackage.MyClass.myMethod)
// Insert code here...
// DO-NOT-DELETE splicer.end(MyPackage.MyClass.myMethod)
}
</PRE></td></tr></table></blockquote>
<P>
It is important to understand where and why splicer blocks occur.
Splicer blocks appear at the beginning and end of each Impl header and source file;
for developers to add <TT>#include</TT>'s and other miscellaneous items respectively.
In the headers, there is a splicer block that allows a user to make the impl
class inherit from some other class. From SIDL's point of view this is
private inheritance -- meaning that it is useful for inheriting implementation
details, but they can't be automatically exposed to the SIDL method dispatch
mechanism.
There is a splicer block inside the class definition for developers to
add any data members the wish to the class.
In the source files, splicer blocks appear in each method implementation.
There are two implicit methods (i.e., methods that did not appear in the SIDL file)
that must also be implemented.
The _ctor method is a constructor function that is run whenever an object is created.
The _dtor method is a destructor function that is run whenever an object is destroyed.
If the object has no state, these functions are typically empty.
<P>
<DIV CLASS="navigation"><HR>
<!--Navigation Panel-->
<A NAME="tex2html2625"
HREF="node129.html">
<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next" SRC="next.png"></A>
<A NAME="tex2html2619"
HREF="node120.html">
<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up" SRC="up.png"></A>
<A NAME="tex2html2613"
HREF="node127.html">
<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous" SRC="prev.png"></A>
<A NAME="tex2html2621"
HREF="node14.html">
<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents" SRC="contents.png"></A>
<A NAME="tex2html2623"
HREF="node317.html">
<IMG WIDTH="43" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="index" SRC="index.png"></A>
<BR>
<B> Next:</B> <A NAME="tex2html2626"
HREF="node129.html">Accessing SIDL Arrays From</A>
<B> Up:</B> <A NAME="tex2html2620"
HREF="node120.html">C++ Bindings</A>
<B> Previous:</B> <A NAME="tex2html2614"
HREF="node127.html">Invoking Babel to generate</A>
<B> <A NAME="tex2html2622"
HREF="node14.html">Contents</A></B>
<B> <A NAME="tex2html2624"
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>
|