summaryrefslogtreecommitdiff
path: root/packages/omniorb/files/dynskel.patch
blob: 469d3eb45e7bcdf21ac94dd3263e1b8f7cfc5005 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
--- src/lib/omniORB/omniidl_be/cxx/dynskel/main.py	27 Nov 2001 14:37:25 -0000	1.14.2.10
+++ src/lib/omniORB/omniidl_be/cxx/dynskel/main.py	15 May 2006 13:36:20 -0000
@@ -474,15 +474,30 @@
 
     elementDesc = output.StringStream()
     prefix = config.state['Private Prefix']
+
     # djr and jnw's "Super-Hacky Optimisation"
     # (amended by dpg1 to be even more hacky, since char/wchar now don't work)
-    if isinstance(d_seqType.type(), idltype.Base) and \
-       not d_seqType.variable() and \
-       not d_seqType.type().kind() in [idltype.tk_char, idltype.tk_wchar] and \
-       not is_array:
+    # (amended again to cope with mixed endian doubles)
+
+    is_double     = d_seqType.type().kind() == idltype.tk_double
+    is_contiguous = (isinstance(d_seqType.type(), idltype.Base) and
+                     not d_seqType.variable() and
+                     not d_seqType.type().kind() in [idltype.tk_char,
+                                                     idltype.tk_wchar] and
+                     not is_array)
+
+    if is_double:
+        elementDesc.out("""
+#ifndef OMNI_MIXED_ENDIAN_DOUBLE""")
+        
+    if is_contiguous:
         elementDesc.out(template.sequence_elementDesc_contiguous,
                         sequence = sequence_desc)
-    else:
+    if is_double:
+        elementDesc.out("""
+#else""")
+    
+    if is_double or not is_contiguous:
         # <---
         required_symbols = [ prefix + "_buildDesc" + seqType_cname ]
         assertDefined(required_symbols)
@@ -492,6 +507,10 @@
                         thing_cname = seqType_cname,
                         thing = thing)
 
+    if is_double:
+        elementDesc.out("""
+#endif""")
+
     # <---
     cname = memberType_cname
     # this is the #ifdef guard