File: node114.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 (174 lines) | stat: -rw-r--r-- 6,668 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
173
174
<!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>Mapping for classes, interfaces, arrays and r-arrays</TITLE>
<META NAME="description" CONTENT="Mapping for classes, interfaces, arrays and r-arrays">
<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="node115.html">
<LINK REL="previous" HREF="node113.html">
<LINK REL="up" HREF="node110.html">
<LINK REL="next" HREF="node115.html">
</HEAD>

<BODY >

<DIV CLASS="navigation"><!--Navigation Panel-->
<A NAME="tex2html2421"
  HREF="node115.html">
<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next" SRC="next.png"></A> 
<A NAME="tex2html2415"
  HREF="node110.html">
<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up" SRC="up.png"></A> 
<A NAME="tex2html2409"
  HREF="node113.html">
<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous" SRC="prev.png"></A> 
<A NAME="tex2html2417"
  HREF="node14.html">
<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents" SRC="contents.png"></A> 
<A NAME="tex2html2419"
  HREF="node317.html">
<IMG WIDTH="43" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="index" SRC="index.png"></A> 
<BR>
<B> Next:</B> <A NAME="tex2html2422"
  HREF="node115.html">Calling SIDL methods from</A>
<B> Up:</B> <A NAME="tex2html2416"
  HREF="node110.html">C Bindings</A>
<B> Previous:</B> <A NAME="tex2html2410"
  HREF="node113.html">Header files</A>
 &nbsp; <B>  <A NAME="tex2html2418"
  HREF="node14.html">Contents</A></B> 
 &nbsp; <B>  <A NAME="tex2html2420"
  HREF="node317.html">Index</A></B> 
<BR>
<BR></DIV>
<!--End of Navigation Panel-->

<H1><A NAME="SECTION03140000000000000000"></A>
<A NAME="s:C_arrays"></A><A NAME="5668"></A><A NAME="5669"></A><A NAME="5670"></A>
<BR>
Mapping for classes, interfaces, arrays and r-arrays
</H1>
Because C doesn't have built in mechanisms for protecting the global
namespace, the C mapping attempts to avoid namespace collisions by
using struct and method names that incorporate all the naming
information from the package, class and method names. For a type <TT>Z</TT> in
package <TT>X.Y</TT>, the name of the type that C clients use for an
object reference is <TT>X_Y_Z</TT>. <TT>X_Y_Z</TT> is defined as
follows in the <TT>X_Y_Z.h</TT> header file:

<P>
<BR>
<PRE  CLASS="verbatim">struct X_Y_Z__object;
struct X_Y_Z__array;
typedef struct X_Y_Z__object* X_Y_Z;
</PRE></td></tr></table></blockquote>
<P>
This code fragment also shows that <TT>struct X_Y_Z__array</TT> is
used for a multi-dimensional array of <TT>X.Y.Z</TT> objects. Here are
some additional concrete examples of the object and interface
reference types derived by the C mapping:

<P>
<BR>
<PRE  CLASS="verbatim">/**
 * Symbol "sidl.BaseClass" (version 0.5.1)
 * 
 * Every class implicitly inherits from &lt;code&gt;BaseClass&lt;/code&gt;.  This
 * class implements the methods in &lt;code&gt;BaseInterface&lt;/code&gt;.
 */
struct sidl_BaseClass__object;
struct sidl_BaseClass__array;
typedef struct sidl_BaseClass__object* sidl_BaseClass;

/**
 * Symbol "sidl.BaseInterface" (version 0.5.1)
 * 
 * Every interface in &lt;code&gt;SIDL&lt;/code&gt; implicitly inherits
 * from &lt;code&gt;BaseInterface&lt;/code&gt;, and it is implemented
 * by &lt;code&gt;BaseClass&lt;/code&gt; below.
 */
struct sidl_BaseInterface__object;
struct sidl_BaseInterface__array;
typedef struct sidl_BaseInterface__object* sidl_BaseInterface;
</PRE></td></tr></table></blockquote>
<P>
Here is an example of the C client-side binding for an r-array. This
example is for the <TT>solve</TT> example from
Section&nbsp;<A HREF="node60.html#ss:r-arrays">5.4</A>. Here, I assume that the package name is
<TT>num</TT>, and the class name is <TT>Linsol</TT>. The data for each
array is passed as a <TT>double</TT> pointer, and the index parameters
are normal <TT>in</TT> ints.

<P>
<BR>
<PRE  CLASS="verbatim">/** C client-side API for solve method */
void num_Linsol_solve(/*in*/ num_Linsol self,
                      /*in*/ double* A,
                      /*inout*/ double* x,
                      /*in*/ double* b,
                      /*in*/ int32_t m,
                      /*in*/ int32_t n);
</PRE></td></tr></table></blockquote>
<P>
The one catch for C programmers is that
<TT>A</TT> is in column-major order -- not the typical row-major
ordering used in C. To access the element in row <TT>i</TT> and column
<TT>j</TT>, you can use the
<TT>RarrayElem2(A,i,j,m)</TT>. <TT>RarrayElem2</TT> is a convenience macro
for C and C++ programmers to access r-arrays in column-major order. To
access memory by stride one make <TT>i</TT> your inner loop.

<P>
Passing <TT>NULL</TT> for <TT>A</TT>, <TT>x</TT>, or <TT>b</TT> is not
allowed. You must always pass a valid pointer.

<P>

<DIV CLASS="navigation"><HR>
<!--Navigation Panel-->
<A NAME="tex2html2421"
  HREF="node115.html">
<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next" SRC="next.png"></A> 
<A NAME="tex2html2415"
  HREF="node110.html">
<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up" SRC="up.png"></A> 
<A NAME="tex2html2409"
  HREF="node113.html">
<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous" SRC="prev.png"></A> 
<A NAME="tex2html2417"
  HREF="node14.html">
<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents" SRC="contents.png"></A> 
<A NAME="tex2html2419"
  HREF="node317.html">
<IMG WIDTH="43" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="index" SRC="index.png"></A> 
<BR>
<B> Next:</B> <A NAME="tex2html2422"
  HREF="node115.html">Calling SIDL methods from</A>
<B> Up:</B> <A NAME="tex2html2416"
  HREF="node110.html">C Bindings</A>
<B> Previous:</B> <A NAME="tex2html2410"
  HREF="node113.html">Header files</A>
 &nbsp; <B>  <A NAME="tex2html2418"
  HREF="node14.html">Contents</A></B> 
 &nbsp; <B>  <A NAME="tex2html2420"
  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>