diff options
Diffstat (limited to 'TAO/tao/CDR.cpp')
-rw-r--r-- | TAO/tao/CDR.cpp | 30 |
1 files changed, 18 insertions, 12 deletions
diff --git a/TAO/tao/CDR.cpp b/TAO/tao/CDR.cpp index d34a4c43896..30a03c0105d 100644 --- a/TAO/tao/CDR.cpp +++ b/TAO/tao/CDR.cpp @@ -896,33 +896,39 @@ TAO_InputCDR::read_array (void* x, else { // I cannot see any fast way out of this.... - typedef void (*SWAPPER)(const char*, char*); - SWAPPER swapper; + char *target = ACE_reinterpret_cast(char*,x); + char *end = target + size*length; switch (size) { case 2: - swapper = CDR::swap_2; + for (; target != end; target += size, buf += size) + { + CDR::swap_2(buf, target); + } break; case 4: - swapper = CDR::swap_4; + for (; target != end; target += size, buf += size) + { + CDR::swap_4(buf, target); + } break; case 8: - swapper = CDR::swap_8; + for (; target != end; target += size, buf += size) + { + CDR::swap_8(buf, target); + } break; case 16: - swapper = CDR::swap_16; + for (; target != end; target += size, buf += size) + { + CDR::swap_16(buf, target); + } break; default: // TODO: print something? this->good_bit_ = 0; return 0; } - char *target = ACE_reinterpret_cast(char*,x); - char *end = target + size*length; - for (; target != end; target += size, buf += size) - { - (*swapper)(buf, target); - } } #else ACE_OS::memcpy (x, buf, size*length); |