This source file includes following definitions.
- opal_datatype_clone
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24 #include "opal_config.h"
25 #include "opal/constants.h"
26 #include "opal/datatype/opal_datatype.h"
27 #include "opal/datatype/opal_datatype_internal.h"
28
29
30
31
32
33
34
35 int32_t opal_datatype_clone( const opal_datatype_t * src_type, opal_datatype_t * dest_type )
36 {
37 int32_t desc_length = src_type->desc.used + 1;
38 dt_elem_desc_t* temp = dest_type->desc.desc;
39
40
41 memcpy( (char*)dest_type + sizeof(opal_object_t),
42 (char*)src_type + sizeof(opal_object_t),
43 sizeof(opal_datatype_t)-sizeof(opal_object_t) );
44
45 dest_type->flags &= (~OPAL_DATATYPE_FLAG_PREDEFINED);
46 dest_type->ptypes = NULL;
47 dest_type->desc.desc = temp;
48
49
50
51
52 if( 0 != src_type->desc.used ) {
53 memcpy( dest_type->desc.desc, src_type->desc.desc, sizeof(dt_elem_desc_t) * desc_length );
54 if( 0 != src_type->opt_desc.used ) {
55 if( src_type->opt_desc.desc == src_type->desc.desc) {
56 dest_type->opt_desc = dest_type->desc;
57 } else {
58 desc_length = dest_type->opt_desc.used + 1;
59 dest_type->opt_desc.desc = (dt_elem_desc_t*)malloc( desc_length * sizeof(dt_elem_desc_t) );
60
61
62
63 dest_type->opt_desc.length = src_type->opt_desc.used;
64 dest_type->opt_desc.used = src_type->opt_desc.used;
65 memcpy( dest_type->opt_desc.desc, src_type->opt_desc.desc, desc_length * sizeof(dt_elem_desc_t) );
66 }
67 } else {
68 assert( NULL == dest_type->opt_desc.desc );
69 assert( 0 == dest_type->opt_desc.length );
70 }
71 }
72 dest_type->id = src_type->id;
73
74 return OPAL_SUCCESS;
75 }