(file) Return to Convert.h CVS log (file) (dir) Up to [Pegasus] / pegasus / src / Pegasus / ProviderManager2 / JMPI

  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

No CVS admin address has been configured
Powered by
ViewCVS 0.9.2