File: node106.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 (152 lines) | stat: -rw-r--r-- 6,320 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
<!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>Parameter Passing</TITLE>
<META NAME="description" CONTENT="Parameter Passing">
<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="node107.html">
<LINK REL="previous" HREF="node105.html">
<LINK REL="up" HREF="node103.html">
<LINK REL="next" HREF="node107.html">
</HEAD>

<BODY >

<DIV CLASS="navigation"><!--Navigation Panel-->
<A NAME="tex2html2228"
  HREF="node107.html">
<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next" SRC="next.png"></A> 
<A NAME="tex2html2222"
  HREF="node103.html">
<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up" SRC="up.png"></A> 
<A NAME="tex2html2216"
  HREF="node105.html">
<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous" SRC="prev.png"></A> 
<A NAME="tex2html2224"
  HREF="node14.html">
<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents" SRC="contents.png"></A> 
<A NAME="tex2html2226"
  HREF="node317.html">
<IMG WIDTH="43" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="index" SRC="index.png"></A> 
<BR>
<B> Next:</B> <A NAME="tex2html2229"
  HREF="node107.html">Method Overloading</A>
<B> Up:</B> <A NAME="tex2html2223"
  HREF="node103.html">Objects</A>
<B> Previous:</B> <A NAME="tex2html2217"
  HREF="node105.html">Methods on Objects</A>
 &nbsp; <B>  <A NAME="tex2html2225"
  HREF="node14.html">Contents</A></B> 
 &nbsp; <B>  <A NAME="tex2html2227"
  HREF="node317.html">Index</A></B> 
<BR>
<BR></DIV>
<!--End of Navigation Panel-->

<H2><A NAME="SECTION02463000000000000000">
Parameter Passing</A>
</H2>

<P>
Each parameter in a method call obeys the following syntax
<BLOCKQUOTE>
<TT> [ (modifier) ] (mode) (type) (name)
</TT></BLOCKQUOTE><A NAME="5148"></A><A NAME="5149"></A><A NAME="5150"></A><A NAME="5151"></A><A NAME="5152"></A>
Where <TT>(mode)</TT> is one of <TT><I CLASS="slanted">in</I></TT>, 
<TT><I CLASS="slanted">out</I></TT>, or <TT><I CLASS="slanted">inout</I></TT>;  <TT>(type)</TT> is
any SIDL recognized type; and <TT>(name)</TT> is
any non-reserved word<A NAME="tex2html30"
  HREF="footnode.html#foot5195"><SUP><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">2</SPAN></SUP></A>.
The <TT>(modifier)</TT> is optional, and currently
unimplemented.  SIDL currently reserves the word
<TT><I CLASS="slanted">copy</I></TT> for future use as an parameter modifier, 
and may add others in the future<A NAME="tex2html31"
  HREF="footnode.html#foot5162"><SUP><SPAN CLASS="arabic">6</SPAN>.<SPAN CLASS="arabic">3</SPAN></SUP></A>.

<P>
For new users, the parameter's mode (e.g. <TT><I CLASS="slanted">in</I></TT>, 
<TT><I CLASS="slanted">out</I></TT>, or <TT><I CLASS="slanted">inout</I></TT>) is perhaps the most troublesome.
On the surface, it's easy to explain that <TT><I CLASS="slanted">in</I></TT> parameters
are passed into the code, <TT><I CLASS="slanted">out</I></TT> parameters come out, 
and <TT><I CLASS="slanted">inout</I></TT> parameters do both.  More specifically the rules are:

<P>

<OL>
<LI><TT><I CLASS="slanted">in</I></TT> does not mean <TT>const</TT>.
</LI>
<LI><TT><I CLASS="slanted">in</I></TT> arguments are passed by value, therefore what happens
	   inside the function has no effect on the value passed in (from the
	   perspective of the caller).
</LI>
<LI><TT><I CLASS="slanted">inout</I></TT> arguments are passed by reference.  The callee is
	   allowed to do whatever it wants with the data passed in,
	   and changes made by the callee are sent back to the caller.
	   For interfaces, classes, and normal arrays, the callee
	   can even destroy the reference, create a new object or
	   array, and return a reference to it.
</LI>
<LI>Objects, interfaces and arrays should be allocated using the
  create methods provided. Types created on the stack should never be
  passed as an <TT><I CLASS="slanted">inout</I></TT> argument, since the implementation
  may want to destroy it.
</LI>
<LI><TT><I CLASS="slanted">out</I></TT> arguments are also passed by reference, but the 
           incoming value is ignore and typically overwritten.
	   <SPAN  CLASS="textit">Do Not</SPAN> attempt to
	   pass in a value to a function through an out argument.  There is no
	   guarantee  that the data will make it to the Implementation, and if the
	   data is lost, there is no guarantee  the reference will be correctly destroyed.
</LI>
</OL>

<P>

<DIV CLASS="navigation"><HR>
<!--Navigation Panel-->
<A NAME="tex2html2228"
  HREF="node107.html">
<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next" SRC="next.png"></A> 
<A NAME="tex2html2222"
  HREF="node103.html">
<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up" SRC="up.png"></A> 
<A NAME="tex2html2216"
  HREF="node105.html">
<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous" SRC="prev.png"></A> 
<A NAME="tex2html2224"
  HREF="node14.html">
<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents" SRC="contents.png"></A> 
<A NAME="tex2html2226"
  HREF="node317.html">
<IMG WIDTH="43" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="index" SRC="index.png"></A> 
<BR>
<B> Next:</B> <A NAME="tex2html2229"
  HREF="node107.html">Method Overloading</A>
<B> Up:</B> <A NAME="tex2html2223"
  HREF="node103.html">Objects</A>
<B> Previous:</B> <A NAME="tex2html2217"
  HREF="node105.html">Methods on Objects</A>
 &nbsp; <B>  <A NAME="tex2html2225"
  HREF="node14.html">Contents</A></B> 
 &nbsp; <B>  <A NAME="tex2html2227"
  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>