|
|
1.1 root 1: /*
2: * Copyright (c) 2000 Apple Computer, Inc. All rights reserved.
3: *
4: * @APPLE_LICENSE_HEADER_START@
5: *
6: * The contents of this file constitute Original Code as defined in and
7: * are subject to the Apple Public Source License Version 1.1 (the
8: * "License"). You may not use this file except in compliance with the
9: * License. Please obtain a copy of the License at
10: * http://www.apple.com/publicsource and read it before using this file.
11: *
12: * This Original Code and all software distributed under the License are
13: * distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, EITHER
14: * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
15: * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
16: * FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT. Please see the
17: * License for the specific language governing rights and limitations
18: * under the License.
19: *
20: * @APPLE_LICENSE_HEADER_END@
21: */
22: /*
23: * Copyright (c) 1992 NeXT Computer, Inc.
24: *
25: * Byte ordering conversion.
26: *
27: * HISTORY
28: *
29: * 20 October 1992 ? at NeXT
30: * Added #ifdef wrapper to prevent multiple inclusions of this file.
31: *
32: * 8 October 1992 ? at NeXT
33: * Converted to NXxxx versions. Condensed history.
34: *
35: * 18 May 1992 ? at NeXT
36: * Created.
37: */
38:
39: #ifndef _ARCHITECTURE_BYTE_ORDER_H_
40: #define _ARCHITECTURE_BYTE_ORDER_H_
41:
42: typedef unsigned long NXSwappedFloat;
43: typedef unsigned long long NXSwappedDouble;
44:
45: #if defined (__ppc__)
46: #include "architecture/ppc/byte_order.h"
47: #elif defined (__i386__)
48: #include "architecture/i386/byte_order.h"
49: #else
50: #error architecture not supported
51: #endif
52:
53: /*
54: * Identify the byte order
55: * of the current host.
56: */
57:
58: enum NXByteOrder {
59: NX_UnknownByteOrder,
60: NX_LittleEndian,
61: NX_BigEndian
62: };
63:
64: static __inline__
65: enum NXByteOrder
66: NXHostByteOrder(void)
67: {
68: unsigned int _x;
69:
70: _x = (NX_BigEndian << 24) | NX_LittleEndian;
71:
72: return ((enum NXByteOrder)*((unsigned char *)&_x));
73: }
74:
75: /*
76: * The predicated versions
77: * are defined here in terms
78: * of the unpredicated ones.
79: */
80:
81: #if __BIG_ENDIAN__
82:
83: static __inline__
84: unsigned short
85: NXSwapBigShortToHost(
86: unsigned short x
87: )
88: {
89: return (x);
90: }
91:
92: static __inline__
93: unsigned int
94: NXSwapBigIntToHost(
95: unsigned int x
96: )
97: {
98: return (x);
99: }
100:
101: static __inline__
102: unsigned long
103: NXSwapBigLongToHost(
104: unsigned long x
105: )
106: {
107: return (x);
108: }
109:
110: static __inline__
111: unsigned long long
112: NXSwapBigLongLongToHost(
113: unsigned long long x
114: )
115: {
116: return (x);
117: }
118:
119: #ifndef KERNEL
120:
121: static __inline__
122: double
123: NXSwapBigDoubleToHost(
124: NXSwappedDouble x
125: )
126: {
127: return NXConvertSwappedDoubleToHost(x);
128: }
129:
130: static __inline__
131: float
132: NXSwapBigFloatToHost(
133: NXSwappedFloat x
134: )
135: {
136: return NXConvertSwappedFloatToHost(x);
137: }
138:
139: #endif /* KERNEL */
140:
141: static __inline__
142: unsigned short
143: NXSwapHostShortToBig(
144: unsigned short x
145: )
146: {
147: return (x);
148: }
149:
150: static __inline__
151: unsigned int
152: NXSwapHostIntToBig(
153: unsigned int x
154: )
155: {
156: return (x);
157: }
158:
159: static __inline__
160: unsigned long
161: NXSwapHostLongToBig(
162: unsigned long x
163: )
164: {
165: return (x);
166: }
167:
168: static __inline__
169: unsigned long long
170: NXSwapHostLongLongToBig(
171: unsigned long long x
172: )
173: {
174: return (x);
175: }
176:
177: #ifndef KERNEL
178:
179: static __inline__
180: NXSwappedDouble
181: NXSwapHostDoubleToBig(
182: double x
183: )
184: {
185: return NXConvertHostDoubleToSwapped(x);
186: }
187:
188: static __inline__
189: NXSwappedFloat
190: NXSwapHostFloatToBig(
191: float x
192: )
193: {
194: return NXConvertHostFloatToSwapped(x);
195: }
196:
197: #endif /* KERNEL */
198:
199: static __inline__
200: unsigned short
201: NXSwapLittleShortToHost(
202: unsigned short x
203: )
204: {
205: return (NXSwapShort(x));
206: }
207:
208: static __inline__
209: unsigned int
210: NXSwapLittleIntToHost(
211: unsigned int x
212: )
213: {
214: return (NXSwapInt(x));
215: }
216:
217: static __inline__
218: unsigned long
219: NXSwapLittleLongToHost(
220: unsigned long x
221: )
222: {
223: return (NXSwapLong(x));
224: }
225:
226: static __inline__
227: unsigned long long
228: NXSwapLittleLongLongToHost(
229: unsigned long long x
230: )
231: {
232: return (NXSwapLongLong(x));
233: }
234:
235: #ifndef KERNEL
236:
237: static __inline__
238: double
239: NXSwapLittleDoubleToHost(
240: NXSwappedDouble x
241: )
242: {
243: return NXConvertSwappedDoubleToHost(NXSwapDouble(x));
244: }
245:
246: static __inline__
247: float
248: NXSwapLittleFloatToHost(
249: NXSwappedFloat x
250: )
251: {
252: return NXConvertSwappedFloatToHost(NXSwapFloat(x));
253: }
254:
255: #endif /* KERNEL */
256:
257: static __inline__
258: unsigned short
259: NXSwapHostShortToLittle(
260: unsigned short x
261: )
262: {
263: return (NXSwapShort(x));
264: }
265:
266: static __inline__
267: unsigned int
268: NXSwapHostIntToLittle(
269: unsigned int x
270: )
271: {
272: return (NXSwapInt(x));
273: }
274:
275: static __inline__
276: unsigned long
277: NXSwapHostLongToLittle(
278: unsigned long x
279: )
280: {
281: return (NXSwapLong(x));
282: }
283:
284: static __inline__
285: unsigned long long
286: NXSwapHostLongLongToLittle(
287: unsigned long long x
288: )
289: {
290: return (NXSwapLongLong(x));
291: }
292:
293: #ifndef KERNEL
294:
295: static __inline__
296: NXSwappedDouble
297: NXSwapHostDoubleToLittle(
298: double x
299: )
300: {
301: return NXSwapDouble(NXConvertHostDoubleToSwapped(x));
302: }
303:
304: static __inline__
305: NXSwappedFloat
306: NXSwapHostFloatToLittle(
307: float x
308: )
309: {
310: return NXSwapFloat(NXConvertHostFloatToSwapped(x));
311: }
312:
313: #endif /* KERNEL */
314: #endif /*__BIG_ENDIAN__ */
315:
316: #if __LITTLE_ENDIAN__
317:
318: static __inline__
319: unsigned short
320: NXSwapBigShortToHost(
321: unsigned short x
322: )
323: {
324: return (NXSwapShort(x));
325: }
326:
327: static __inline__
328: unsigned int
329: NXSwapBigIntToHost(
330: unsigned int x
331: )
332: {
333: return (NXSwapInt(x));
334: }
335:
336: static __inline__
337: unsigned long
338: NXSwapBigLongToHost(
339: unsigned long x
340: )
341: {
342: return (NXSwapLong(x));
343: }
344:
345: static __inline__
346: unsigned long long
347: NXSwapBigLongLongToHost(
348: unsigned long long x
349: )
350: {
351: return (NXSwapLongLong(x));
352: }
353:
354: static __inline__
355: double
356: NXSwapBigDoubleToHost(
357: NXSwappedDouble x
358: )
359: {
360: return NXConvertSwappedDoubleToHost(NXSwapDouble(x));
361: }
362:
363: static __inline__
364: float
365: NXSwapBigFloatToHost(
366: NXSwappedFloat x
367: )
368: {
369: return NXConvertSwappedFloatToHost(NXSwapFloat(x));
370: }
371:
372: static __inline__
373: unsigned short
374: NXSwapHostShortToBig(
375: unsigned short x
376: )
377: {
378: return (NXSwapShort(x));
379: }
380:
381: static __inline__
382: unsigned int
383: NXSwapHostIntToBig(
384: unsigned int x
385: )
386: {
387: return (NXSwapInt(x));
388: }
389:
390: static __inline__
391: unsigned long
392: NXSwapHostLongToBig(
393: unsigned long x
394: )
395: {
396: return (NXSwapLong(x));
397: }
398:
399: static __inline__
400: unsigned long long
401: NXSwapHostLongLongToBig(
402: unsigned long long x
403: )
404: {
405: return (NXSwapLongLong(x));
406: }
407:
408: static __inline__
409: NXSwappedDouble
410: NXSwapHostDoubleToBig(
411: double x
412: )
413: {
414: return (NXSwapDouble(NXConvertHostDoubleToSwapped(x)));
415: }
416:
417: static __inline__
418: NXSwappedFloat
419: NXSwapHostFloatToBig(
420: float x
421: )
422: {
423: return (NXSwapFloat(NXConvertHostFloatToSwapped(x)));
424: }
425:
426: static __inline__
427: unsigned short
428: NXSwapLittleShortToHost(
429: unsigned short x
430: )
431: {
432: return (x);
433: }
434:
435: static __inline__
436: unsigned int
437: NXSwapLittleIntToHost(
438: unsigned int x
439: )
440: {
441: return (x);
442: }
443:
444: static __inline__
445: unsigned long
446: NXSwapLittleLongToHost(
447: unsigned long x
448: )
449: {
450: return (x);
451: }
452:
453: static __inline__
454: unsigned long long
455: NXSwapLittleLongLongToHost(
456: unsigned long long x
457: )
458: {
459: return (x);
460: }
461:
462: static __inline__
463: double
464: NXSwapLittleDoubleToHost(
465: NXSwappedDouble x
466: )
467: {
468: return NXConvertSwappedDoubleToHost(x);
469: }
470:
471: static __inline__
472: float
473: NXSwapLittleFloatToHost(
474: NXSwappedFloat x
475: )
476: {
477: return NXConvertSwappedFloatToHost(x);
478: }
479:
480: static __inline__
481: unsigned short
482: NXSwapHostShortToLittle(
483: unsigned short x
484: )
485: {
486: return (x);
487: }
488:
489: static __inline__
490: unsigned int
491: NXSwapHostIntToLittle(
492: unsigned int x
493: )
494: {
495: return (x);
496: }
497:
498: static __inline__
499: unsigned long
500: NXSwapHostLongToLittle(
501: unsigned long x
502: )
503: {
504: return (x);
505: }
506:
507: static __inline__
508: unsigned long long
509: NXSwapHostLongLongToLittle(
510: unsigned long long x
511: )
512: {
513: return (x);
514: }
515:
516: static __inline__
517: NXSwappedDouble
518: NXSwapHostDoubleToLittle(
519: double x
520: )
521: {
522: return NXConvertHostDoubleToSwapped(x);
523: }
524:
525: static __inline__
526: NXSwappedFloat
527: NXSwapHostFloatToLittle(
528: float x
529: )
530: {
531: return NXConvertHostFloatToSwapped(x);
532: }
533:
534: #endif /* __LITTLE_ENDIAN__ */
535:
536: #endif /* _ARCHITECTURE_BYTE_ORDER_H_ */
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.