File: node128.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 (164 lines) | stat: -rw-r--r-- 6,528 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
<!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>
 &nbsp; <B>  <A NAME="tex2html2622"
  HREF="node14.html">Contents</A></B> 
 &nbsp; <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&nbsp;<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>
 &nbsp; <B>  <A NAME="tex2html2622"
  HREF="node14.html">Contents</A></B> 
 &nbsp; <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>