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

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

No CVS admin address has been configured
Powered by
ViewCVS 0.9.2