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 marek 1.4 #define ConvertEndianSwap(n) \
79 ((((n) & PEGASUS_UINT64_LITERAL(0xff00000000000000)) >> 56) | \
80 (((n) & PEGASUS_UINT64_LITERAL(0x00ff000000000000)) >> 40) | \
81 (((n) & PEGASUS_UINT64_LITERAL(0x0000ff0000000000)) >> 24) | \
82 (((n) & PEGASUS_UINT64_LITERAL(0x000000ff00000000)) >> 8) | \
83 (((n) & PEGASUS_UINT64_LITERAL(0x00000000ff000000)) << 8) | \
84 (((n) & PEGASUS_UINT64_LITERAL(0x0000000000ff0000)) << 24) | \
85 (((n) & PEGASUS_UINT64_LITERAL(0x000000000000ff00)) << 40) | \
86 (((n) & PEGASUS_UINT64_LITERAL(0x00000000000000ff)) << 56) )
|
87 mark.hamzy 1.1
88 template <typename J, typename C>
89 C TemplateConvertJavaToC (J p)
90 {
|
91 mark.hamzy 1.3 Uint64 *pui64 = (Uint64 *)p;
92 Uint64 *ptrap = 0;
|
93 mark.hamzy 1.1
|
94 mark.hamzy 1.3 if (pui64[0] != CONVERT_SIGNATURE_BEGIN)
|
95 mark.hamzy 1.1 {
|
96 marek 1.4 PEGASUS_STD(cout)<<"TemplateConvertJavaToC "<<
97 PEGASUS_STD(hex)<<(void*)p<<PEGASUS_STD(dec)<<PEGASUS_STD(endl);
|
98 mark.hamzy 1.1 *ptrap = 0;
99 }
|
100 mark.hamzy 1.3 if (pui64[1] != ConvertEndianSwap (pui64[2]))
|
101 mark.hamzy 1.1 {
102 *ptrap = 0;
103 }
|
104 mark.hamzy 1.3 if (pui64[3] != CONVERT_SIGNATURE_END)
|
105 mark.hamzy 1.1 {
|
106 marek 1.4 PEGASUS_STD(cout)<<"TemplateConvertJavaToC "<<
107 PEGASUS_STD(hex)<<(void*)p<<PEGASUS_STD(dec)<<PEGASUS_STD(endl);
|
108 mark.hamzy 1.1 *ptrap = 0;
109 }
110
|
111 marek 1.4 PEGASUS_STD(cout)<<"TemplateConvertJavaToC "<<
112 PEGASUS_STD(hex)<<(void*)p<<" -> "<<(void*)pui64[1]<<
113 PEGASUS_STD(dec)<<PEGASUS_STD(endl);
|
114 mark.hamzy 1.1
|
115 mark.hamzy 1.3 return (C)pui64[1];
|
116 mark.hamzy 1.1 }
117
118 template <typename C, typename J>
119 J TemplateConvertCToJava (C p)
120 {
|
121 mark.hamzy 1.3 Uint64 *pui64 = (Uint64 *)::malloc (CONVERT_SIZE);
122 Uint64 *ptrap = 0;
|
123 mark.hamzy 1.1
|
124 mark.hamzy 1.3 if (pui64)
|
125 mark.hamzy 1.1 {
|
126 mark.hamzy 1.3 pui64[0] = CONVERT_SIGNATURE_BEGIN;
127 pui64[1] = (Uint64)p;
128 pui64[2] = ConvertEndianSwap ((Uint64)p);
129 pui64[3] = CONVERT_SIGNATURE_END;
|
130 mark.hamzy 1.1 }
131 else
132 {
|
133 marek 1.4 PEGASUS_STD(cout)<<"TemplateConvertCToJava"<<
134 PEGASUS_STD(hex)<<(void*)p<<PEGASUS_STD(dec)<<PEGASUS_STD(endl);
|
135 mark.hamzy 1.1 *ptrap = 0;
136 }
137
|
138 marek 1.4 PEGASUS_STD(cout)<<"TemplateConvertCToJava "<<
139 PEGASUS_STD(hex)<<(void*)p<<" -> "<<(void*)pui64<<
140 PEGASUS_STD(dec)<<PEGASUS_STD(endl);
|
141 mark.hamzy 1.1
|
142 mark.hamzy 1.3 return (J)pui64;
|
143 mark.hamzy 1.1 }
144
145 template <typename J>
146 void TemplateConvertCleanup (J p)
147 {
|
148 mark.hamzy 1.3 Uint64 *pui64 = (Uint64 *)p;
149 Uint64 *ptrap = 0;
|
150 mark.hamzy 1.1
|
151 marek 1.4 PEGASUS_STD(cout)<<"TemplateConvertCleanup "<<
152 PEGASUS_STD(hex)<<(void*)p<<PEGASUS_STD(dec)<<PEGASUS_STD(endl);
|
153 mark.hamzy 1.1
|
154 mark.hamzy 1.3 if (pui64[0] != CONVERT_SIGNATURE_BEGIN)
|
155 mark.hamzy 1.1 {
156 *ptrap = 0;
157 }
|
158 mark.hamzy 1.3 if (pui64[1] != ConvertEndianSwap (pui64[2]))
|
159 mark.hamzy 1.1 {
160 *ptrap = 0;
161 }
|
162 mark.hamzy 1.3 if (pui64[3] != CONVERT_SIGNATURE_END)
|
163 mark.hamzy 1.1 {
164 *ptrap = 0;
165 }
166
|
167 mark.hamzy 1.3 ::memset (pui64, 0, CONVERT_SIZE);
168 ::free ((void *)pui64);
|
169 mark.hamzy 1.1 }
170
171 #elif CONVERT_SMALL_PAD
172
173 #define DEBUG_ConvertJavaToC(j,c,p) TemplateConvertJavaToC <j,c> (p)
174 #define DEBUG_ConvertCToJava(c,j,p) TemplateConvertCToJava <c,j> (p)
175 #define DEBUG_ConvertCleanup(j,p) TemplateConvertCleanup <j> (p)
176
177 #define CONVERT_SIGNATURE_BEGIN 0xFE
178 #define CONVERT_SIGNATURE_END 0x12
|
179 marek 1.4 #define CONVERT_SIZE (sizeof(unsigned char)+ \
180 sizeof(Uint64)+ \
181 sizeof(unsigned char))
|
182 mark.hamzy 1.1
183 template <typename J, typename C>
184 C TemplateConvertJavaToC (J p)
185 {
186 unsigned char *puch = (unsigned char *)p;
|
187 mark.hamzy 1.3 unsigned char *ptrap = 0;
|
188 mark.hamzy 1.1
189 if (puch[0] != CONVERT_SIGNATURE_BEGIN)
190 {
|
191 marek 1.4 PEGASUS_STD(cout)<<"TemplateConvertJavaToC "<<
192 PEGASUS_STD(hex)<<(void*)p<<PEGASUS_STD(dec)<<PEGASUS_STD(endl);
|
193 mark.hamzy 1.1 *ptrap = 0;
194 }
|
195 mark.hamzy 1.3 if (puch[sizeof (unsigned char) + sizeof (Uint64)] != CONVERT_SIGNATURE_END)
|
196 mark.hamzy 1.1 {
|
197 marek 1.4 PEGASUS_STD(cout)<<"TemplateConvertJavaToC "<<
198 PEGASUS_STD(hex)<<(void*)p<<PEGASUS_STD(dec)<<PEGASUS_STD(endl);
|
199 mark.hamzy 1.1 *ptrap = 0;
200 }
201
|
202 marek 1.4 PEGASUS_STD(cout)<<"TemplateConvertJavaToC "<<
203 PEGASUS_STD(hex)<<(void*)p<<" -> "<<(void*)(*((long *)(puch + 1)))<<
204 PEGASUS_STD(dec)<<PEGASUS_STD(endl);
|
205 mark.hamzy 1.1
|
206 mark.hamzy 1.3 return (C)(void *)(*((Uint64 *)(puch + 1)));
|
207 mark.hamzy 1.1 }
208
209 template <typename C, typename J>
210 J TemplateConvertCToJava (C p)
211 {
|
212 marek 1.4 unsigned char *puch = (unsigned char *)::malloc(CONVERT_SIZE);
|
213 mark.hamzy 1.3 unsigned char *ptrap = 0;
|
214 mark.hamzy 1.1
215 if (puch)
216 {
|
217 mark.hamzy 1.3 puch[0] = CONVERT_SIGNATURE_BEGIN;
218 *(Uint64 *)(puch + 1) = (Uint64)p;
219 puch[1 + sizeof (Uint64)] = CONVERT_SIGNATURE_END;
|
220 mark.hamzy 1.1 }
221 else
222 {
|
223 marek 1.4 PEGASUS_STD(cout)<<"TemplateConvertCToJava"<<
224 PEGASUS_STD(hex)<<(void*)p<<PEGASUS_STD(dec)<<PEGASUS_STD(endl);
|
225 mark.hamzy 1.1 *ptrap = 0;
226 }
227
|
228 marek 1.4 PEGASUS_STD(cout)<<"TemplateConvertCToJava "<<
229 PEGASUS_STD(hex)<<(void*)p<<" -> "<<(void *)puch<<
230 PEGASUS_STD(dec)<<PEGASUS_STD(endl);
|
231 mark.hamzy 1.1
232 return (J)puch;
233 }
234
235 template <typename J>
236 void TemplateConvertCleanup (J p)
237 {
238 unsigned char *puch = (unsigned char *)p;
|
239 mark.hamzy 1.3 unsigned char *ptrap = 0;
|
240 mark.hamzy 1.1
|
241 marek 1.4 PEGASUS_STD(cout)<<"TemplateConvertCleanup "<<
242 PEGASUS_STD(hex)<<(void*)p<<PEGASUS_STD(dec)<<PEGASUS_STD(endl);
|
243 mark.hamzy 1.1
244 if (puch[0] != CONVERT_SIGNATURE_BEGIN)
245 {
246 *ptrap = 0;
247 }
|
248 mark.hamzy 1.3 if (puch[1 + sizeof (Uint64)] != CONVERT_SIGNATURE_END)
|
249 mark.hamzy 1.1 {
250 *ptrap = 0;
251 }
252
|
253 marek 1.4 ::memset(puch, 0, CONVERT_SIZE);
254 ::free((void *)puch);
|
255 mark.hamzy 1.1 }
256
257 #else
258
|
259 marek 1.4 #error "Unsupported conversion case in \
260 src/Pegasus/ProviderManager2/JMPI/Convert.h"
|
261 mark.hamzy 1.1
262 #endif
263
264 #endif
|
265 mark.hamzy 1.3
266 #endif
|