1 karl 1.2 //%2006////////////////////////////////////////////////////////////////////////
|
2 mark.hamzy 1.1 //
3 // Copyright (c) 2000, 2001, 2002 BMC Software; Hewlett-Packard Development
4 // Company, L.P.; IBM Corp.; The Open Group; Tivoli Systems.
5 // Copyright (c) 2003 BMC Software; Hewlett-Packard Development Company, L.P.;
6 // IBM Corp.; EMC Corporation, The Open Group.
7 // Copyright (c) 2004 BMC Software; Hewlett-Packard Development Company, L.P.;
8 // IBM Corp.; EMC Corporation; VERITAS Software Corporation; The Open Group.
9 // Copyright (c) 2005 Hewlett-Packard Development Company, L.P.; IBM Corp.;
10 // EMC Corporation; VERITAS Software Corporation; The Open Group.
|
11 karl 1.2 // Copyright (c) 2006 Hewlett-Packard Development Company, L.P.; IBM Corp.;
12 // EMC Corporation; Symantec Corporation; The Open Group.
|
13 mark.hamzy 1.1 //
14 // Permission is hereby granted, free of charge, to any person obtaining a copy
15 // of this software and associated documentation files (the "Software"), to
16 // deal in the Software without restriction, including without limitation the
17 // rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
18 // sell copies of the Software, and to permit persons to whom the Software is
19 // furnished to do so, subject to the following conditions:
|
20 mark.hamzy 1.3 //
|
21 mark.hamzy 1.1 // THE ABOVE COPYRIGHT NOTICE AND THIS PERMISSION NOTICE SHALL BE INCLUDED IN
22 // ALL COPIES OR SUBSTANTIAL PORTIONS OF THE SOFTWARE. THE SOFTWARE IS PROVIDED
23 // "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT
24 // LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
25 // PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
26 // HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
27 // ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
28 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
29 //
30 //==============================================================================
31 //
32 // Author: Mark Hamzy, hamzy@us.ibm.com
33 //
34 //%/////////////////////////////////////////////////////////////////////////////
35
|
36 mark.hamzy 1.3 #ifndef _JMPI_Convert_h
37 #define _JMPI_Convert_h
38
|
39 mark.hamzy 1.1 #ifndef PEGASUS_DEBUG
40
41 // Retail build
42
43 #define DEBUG_ConvertJavaToC(j,c,p) (c)p
44 #define DEBUG_ConvertCToJava(c,j,p) (j)p
45 #define DEBUG_ConvertCleanup(c,p)
46
47 #else
48
49 // Debug build
50
51 #define CONVERT_NONE 1
52 #define CONVERT_BIG_PAD 0
53 #define CONVERT_SMALL_PAD 0
54
|
55 mark.hamzy 1.3 #include <Pegasus/Common/Config.h>
56 #include <iostream>
57 #include <cstdlib>
58
59 PEGASUS_USING_STD;
60 PEGASUS_USING_PEGASUS;
61
|
62 mark.hamzy 1.1 #if CONVERT_NONE
63
64 #define DEBUG_ConvertJavaToC(j,c,p) (c)p
65 #define DEBUG_ConvertCToJava(c,j,p) (j)p
66 #define DEBUG_ConvertCleanup(c,p)
67
68 #elif CONVERT_BIG_PAD
69
70 #define DEBUG_ConvertJavaToC(j,c,p) TemplateConvertJavaToC <j,c> (p)
71 #define DEBUG_ConvertCToJava(c,j,p) TemplateConvertCToJava <c,j> (p)
72 #define DEBUG_ConvertCleanup(j,p) TemplateConvertCleanup <j> (p)
73
|
74 mark.hamzy 1.3 #define CONVERT_SIGNATURE_BEGIN PEGASUS_UINT64_LITERAL(0x0123456789ABCDEF)
75 #define CONVERT_SIGNATURE_END PEGASUS_UINT64_LITERAL(0xFEDCBA9876543210)
76 #define CONVERT_SIZE (4 * sizeof (Uint64))
77
78 #define ConvertEndianSwap(n) ((((n) & PEGASUS_UINT64_LITERAL(0xff00000000000000)) >> 56) | \
79 (((n) & PEGASUS_UINT64_LITERAL(0x00ff000000000000)) >> 40) | \
80 (((n) & PEGASUS_UINT64_LITERAL(0x0000ff0000000000)) >> 24) | \
81 (((n) & PEGASUS_UINT64_LITERAL(0x000000ff00000000)) >> 8) | \
82 (((n) & PEGASUS_UINT64_LITERAL(0x00000000ff000000)) << 8) | \
83 (((n) & PEGASUS_UINT64_LITERAL(0x0000000000ff0000)) << 24) | \
84 (((n) & PEGASUS_UINT64_LITERAL(0x000000000000ff00)) << 40) | \
85 (((n) & PEGASUS_UINT64_LITERAL(0x00000000000000ff)) << 56) )
|
86 mark.hamzy 1.1
87 template <typename J, typename C>
88 C TemplateConvertJavaToC (J p)
89 {
|
90 mark.hamzy 1.3 Uint64 *pui64 = (Uint64 *)p;
91 Uint64 *ptrap = 0;
|
92 mark.hamzy 1.1
|
93 mark.hamzy 1.3 if (pui64[0] != CONVERT_SIGNATURE_BEGIN)
|
94 mark.hamzy 1.1 {
95 PEGASUS_STD(cout)<<"TemplateConvertJavaToC "<<PEGASUS_STD(hex)<<(void*)p<<PEGASUS_STD(dec)<<PEGASUS_STD(endl);
96 *ptrap = 0;
97 }
|
98 mark.hamzy 1.3 if (pui64[1] != ConvertEndianSwap (pui64[2]))
|
99 mark.hamzy 1.1 {
100 *ptrap = 0;
101 }
|
102 mark.hamzy 1.3 if (pui64[3] != CONVERT_SIGNATURE_END)
|
103 mark.hamzy 1.1 {
104 PEGASUS_STD(cout)<<"TemplateConvertJavaToC "<<PEGASUS_STD(hex)<<(void*)p<<PEGASUS_STD(dec)<<PEGASUS_STD(endl);
105 *ptrap = 0;
106 }
107
|
108 mark.hamzy 1.3 PEGASUS_STD(cout)<<"TemplateConvertJavaToC "<<PEGASUS_STD(hex)<<(void*)p<<" -> "<<(void*)pui64[1]<<PEGASUS_STD(dec)<<PEGASUS_STD(endl);
|
109 mark.hamzy 1.1
|
110 mark.hamzy 1.3 return (C)pui64[1];
|
111 mark.hamzy 1.1 }
112
113 template <typename C, typename J>
114 J TemplateConvertCToJava (C p)
115 {
|
116 mark.hamzy 1.3 Uint64 *pui64 = (Uint64 *)::malloc (CONVERT_SIZE);
117 Uint64 *ptrap = 0;
|
118 mark.hamzy 1.1
|
119 mark.hamzy 1.3 if (pui64)
|
120 mark.hamzy 1.1 {
|
121 mark.hamzy 1.3 pui64[0] = CONVERT_SIGNATURE_BEGIN;
122 pui64[1] = (Uint64)p;
123 pui64[2] = ConvertEndianSwap ((Uint64)p);
124 pui64[3] = CONVERT_SIGNATURE_END;
|
125 mark.hamzy 1.1 }
126 else
127 {
128 PEGASUS_STD(cout)<<"TemplateConvertCToJava"<<PEGASUS_STD(hex)<<(void*)p<<PEGASUS_STD(dec)<<PEGASUS_STD(endl);
129 *ptrap = 0;
130 }
131
|
132 mark.hamzy 1.3 PEGASUS_STD(cout)<<"TemplateConvertCToJava "<<PEGASUS_STD(hex)<<(void*)p<<" -> "<<(void*)pui64<<PEGASUS_STD(dec)<<PEGASUS_STD(endl);
|
133 mark.hamzy 1.1
|
134 mark.hamzy 1.3 return (J)pui64;
|
135 mark.hamzy 1.1 }
136
137 template <typename J>
138 void TemplateConvertCleanup (J p)
139 {
|
140 mark.hamzy 1.3 Uint64 *pui64 = (Uint64 *)p;
141 Uint64 *ptrap = 0;
|
142 mark.hamzy 1.1
143 PEGASUS_STD(cout)<<"TemplateConvertCleanup "<<PEGASUS_STD(hex)<<(void*)p<<PEGASUS_STD(dec)<<PEGASUS_STD(endl);
144
|
145 mark.hamzy 1.3 if (pui64[0] != CONVERT_SIGNATURE_BEGIN)
|
146 mark.hamzy 1.1 {
147 *ptrap = 0;
148 }
|
149 mark.hamzy 1.3 if (pui64[1] != ConvertEndianSwap (pui64[2]))
|
150 mark.hamzy 1.1 {
151 *ptrap = 0;
152 }
|
153 mark.hamzy 1.3 if (pui64[3] != CONVERT_SIGNATURE_END)
|
154 mark.hamzy 1.1 {
155 *ptrap = 0;
156 }
157
|
158 mark.hamzy 1.3 ::memset (pui64, 0, CONVERT_SIZE);
159 ::free ((void *)pui64);
|
160 mark.hamzy 1.1 }
161
162 #elif CONVERT_SMALL_PAD
163
164 #define DEBUG_ConvertJavaToC(j,c,p) TemplateConvertJavaToC <j,c> (p)
165 #define DEBUG_ConvertCToJava(c,j,p) TemplateConvertCToJava <c,j> (p)
166 #define DEBUG_ConvertCleanup(j,p) TemplateConvertCleanup <j> (p)
167
168 #define CONVERT_SIGNATURE_BEGIN 0xFE
169 #define CONVERT_SIGNATURE_END 0x12
|
170 mark.hamzy 1.3 #define CONVERT_SIZE (sizeof (unsigned char) + sizeof (Uint64) + sizeof (unsigned char))
|
171 mark.hamzy 1.1
172 template <typename J, typename C>
173 C TemplateConvertJavaToC (J p)
174 {
175 unsigned char *puch = (unsigned char *)p;
|
176 mark.hamzy 1.3 unsigned char *ptrap = 0;
|
177 mark.hamzy 1.1
178 if (puch[0] != CONVERT_SIGNATURE_BEGIN)
179 {
180 PEGASUS_STD(cout)<<"TemplateConvertJavaToC "<<PEGASUS_STD(hex)<<(void*)p<<PEGASUS_STD(dec)<<PEGASUS_STD(endl);
181 *ptrap = 0;
182 }
|
183 mark.hamzy 1.3 if (puch[sizeof (unsigned char) + sizeof (Uint64)] != CONVERT_SIGNATURE_END)
|
184 mark.hamzy 1.1 {
185 PEGASUS_STD(cout)<<"TemplateConvertJavaToC "<<PEGASUS_STD(hex)<<(void*)p<<PEGASUS_STD(dec)<<PEGASUS_STD(endl);
186 *ptrap = 0;
187 }
188
|
189 mark.hamzy 1.3 PEGASUS_STD(cout)<<"TemplateConvertJavaToC "<<PEGASUS_STD(hex)<<(void*)p<<" -> "<<(void*)(*((long *)(puch + 1)))<<PEGASUS_STD(dec)<<PEGASUS_STD(endl);
|
190 mark.hamzy 1.1
|
191 mark.hamzy 1.3 return (C)(void *)(*((Uint64 *)(puch + 1)));
|
192 mark.hamzy 1.1 }
193
194 template <typename C, typename J>
195 J TemplateConvertCToJava (C p)
196 {
|
197 mark.hamzy 1.3 unsigned char *puch = (unsigned char *)::malloc (CONVERT_SIZE);
198 unsigned char *ptrap = 0;
|
199 mark.hamzy 1.1
200 if (puch)
201 {
|
202 mark.hamzy 1.3 puch[0] = CONVERT_SIGNATURE_BEGIN;
203 *(Uint64 *)(puch + 1) = (Uint64)p;
204 puch[1 + sizeof (Uint64)] = CONVERT_SIGNATURE_END;
|
205 mark.hamzy 1.1 }
206 else
207 {
208 PEGASUS_STD(cout)<<"TemplateConvertCToJava"<<PEGASUS_STD(hex)<<(void*)p<<PEGASUS_STD(dec)<<PEGASUS_STD(endl);
209 *ptrap = 0;
210 }
211
212 PEGASUS_STD(cout)<<"TemplateConvertCToJava "<<PEGASUS_STD(hex)<<(void*)p<<" -> "<<(void *)puch<<PEGASUS_STD(dec)<<PEGASUS_STD(endl);
213
214 return (J)puch;
215 }
216
217 template <typename J>
218 void TemplateConvertCleanup (J p)
219 {
220 unsigned char *puch = (unsigned char *)p;
|
221 mark.hamzy 1.3 unsigned char *ptrap = 0;
|
222 mark.hamzy 1.1
223 PEGASUS_STD(cout)<<"TemplateConvertCleanup "<<PEGASUS_STD(hex)<<(void*)p<<PEGASUS_STD(dec)<<PEGASUS_STD(endl);
224
225 if (puch[0] != CONVERT_SIGNATURE_BEGIN)
226 {
227 *ptrap = 0;
228 }
|
229 mark.hamzy 1.3 if (puch[1 + sizeof (Uint64)] != CONVERT_SIGNATURE_END)
|
230 mark.hamzy 1.1 {
231 *ptrap = 0;
232 }
233
|
234 mark.hamzy 1.3 ::memset (puch, 0, CONVERT_SIZE);
235 ::free ((void *)puch);
|
236 mark.hamzy 1.1 }
237
238 #else
239
240 #error "Unsupported conversion case in src/Pegasus/ProviderManager2/JMPI/Convert.h"
241
242 #endif
243
244 #endif
|
245 mark.hamzy 1.3
246 #endif
|