(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                #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

No CVS admin address has been configured
Powered by
ViewCVS 0.9.2