2
* ADIOS is freely available under the terms of the BSD license described
3
* in the COPYING file in the top level directory of this source distribution.
5
* Copyright (c) 2008 - 2009. UT-BATTELLE, LLC. All rights reserved.
10
#include "public/adios_types.h"
11
#include "core/adios_logger.h"
13
void show_bytes(unsigned char * start, int len)
16
for (i = 0; i < len; i ++) {
17
log_info(" %.2x", start[i]);
23
void swap_16_ptr(void *data)
25
uint16_t d = *(uint16_t *)data;
26
*(uint16_t *)data = d>>8 | d<<8;
30
void swap_32_ptr(void *data)
32
uint32_t d = *(uint32_t *)data;
33
*(uint32_t *)data = ((d&0x000000FF)<<24)
36
+ ((d&0xFF000000)>>24);
40
void swap_64_ptr(void *data)
42
uint64_t d = *(uint64_t *)data;
43
*(uint64_t *)data = ((d&0x00000000000000FF)<<56)
44
+ ((d&0x000000000000FF00)<<40)
45
+ ((d&0x0000000000FF0000)<<24)
46
+ ((d&0x00000000FF000000)<<8)
47
+ ((d&0x000000FF00000000LL)>>8)
48
+ ((d&0x0000FF0000000000LL)>>24)
49
+ ((d&0x00FF000000000000LL)>>40)
50
+ ((d&0xFF00000000000000LL)>>56);
54
void swap_128_ptr(void *data)
56
uint64_t d = *(uint64_t *)data;
57
*(uint64_t *)data = ((d&0x00000000000000FF)<<56)
58
+ ((d&0x000000000000FF00)<<40)
59
+ ((d&0x0000000000FF0000)<<24)
60
+ ((d&0x00000000FF000000)<<8)
61
+ ((d&0x000000FF00000000LL)>>8)
62
+ ((d&0x0000FF0000000000LL)>>24)
63
+ ((d&0x00FF000000000000LL)>>40)
64
+ ((d&0xFF00000000000000LL)>>56);
65
d = *((uint64_t *)data + 1);
66
d = ((d&0x00000000000000FF)<<56)
67
+ ((d&0x000000000000FF00)<<40)
68
+ ((d&0x0000000000FF0000)<<24)
69
+ ((d&0x00000000FF000000)<<8)
70
+ ((d&0x000000FF00000000LL)>>8)
71
+ ((d&0x0000FF0000000000LL)>>24)
72
+ ((d&0x00FF000000000000LL)>>40)
73
+ ((d&0xFF00000000000000LL)>>56);
74
*((uint64_t *)data + 1) = *(uint64_t *)data;
75
*(uint64_t *)data = d;
79
void swap_adios_type(void *data, enum ADIOS_DATATYPES type)
81
if(type == adios_string) {
85
uint64_t size = adios_get_type_size (type, "");
104
case adios_double_complex:
112
void swap_adios_type_array(void *data, enum ADIOS_DATATYPES type, uint64_t payload_size)
114
uint64_t size = adios_get_type_size (type, "");
115
uint64_t num_elements = payload_size / size;
118
for(i = 0; i < num_elements; i ++) {
119
swap_adios_type((char *)data + i*size, type);
123
void swap_ptr(void * data, int size)