---
name: "ACE_OutputCDR"
section: "3"
platform: "linux"
package: "libace-doc"
version: "5.0.7-4"
release: "Debian 2.2 (Potato)"
platforms: ["linux"]
url: "https://new.carta.tech/ACE_OutputCDR"
---

# ACE\_OutputCDR(3)

A CDR stream for writing, i.e. for marshalling.

## NAME

ACE\_OutputCDR -  A CDR stream for writing, i.e. for marshalling.

## SYNOPSIS

```
#include <ace/CDR_Stream.h>
class ACE_OutputCDR
{
  public:
    friend class ACE_Char_Codeset_Translator;
    friend class ACE_WChar_Codeset_Translator;
    friend class ACE_InputCDR;
    ACE_OutputCDR (
        size_t size = 0,
        int byte_order = ACE_CDR_BYTE_ORDER,
        ACE_Allocator* buffer_allocator = 0,
        ACE_Allocator* data_block_allocator = 0,
        size_t memcpy_tradeoff = ACE_DEFAULT_CDR_MEMCPY_TRADEOFF
        );
    ACE_OutputCDR (
        char *data,
        size_t size,
        int byte_order = ACE_CDR_BYTE_ORDER,
        ACE_Allocator* buffer_allocator = 0,
        ACE_Allocator* data_block_allocator = 0,
        size_t memcpy_tradeoff= ACE_DEFAULT_CDR_MEMCPY_TRADEOFF
        );
    ACE_OutputCDR (
        ACE_Message_Block *data,
        int byte_order = ACE_CDR_BYTE_ORDER,
        size_t memcpy_tradeoff= ACE_DEFAULT_CDR_MEMCPY_TRADEOFF
        );
    ~ACE_OutputCDR (void);
    struct ACE_Export from_boolean
    {
      public:
        from_boolean (ACE_CDR::Boolean b);
        ACE_CDR::Boolean val_;
    };
```

    ACE\_CDR::Boolean write\_boolean (ACE\_CDR::Boolean x);     ACE\_CDR::Boolean write\_char (ACE\_CDR::Char x);     ACE\_CDR::Boolean write\_wchar (ACE\_CDR::WChar x);     ACE\_CDR::Boolean write\_octet (ACE\_CDR::Octet x);     ACE\_CDR::Boolean write\_short (ACE\_CDR::Short x);     ACE\_CDR::Boolean write\_ushort (ACE\_CDR::UShort x);     ACE\_CDR::Boolean write\_long (ACE\_CDR::Long x);     ACE\_CDR::Boolean write\_ulong (ACE\_CDR::ULong x);     ACE\_CDR::Boolean write\_longlong (const ACE\_CDR::LongLong &x);     ACE\_CDR::Boolean write\_ulonglong (const ACE\_CDR::ULongLong &x);     ACE\_CDR::Boolean write\_float (ACE\_CDR::Float x);     ACE\_CDR::Boolean write\_double (const ACE\_CDR::Double &x);     ACE\_CDR::Boolean write\_longdouble (const ACE\_CDR::LongDouble &x);     ACE\_CDR::Boolean write\_string (const ACE\_CDR::Char \*x);     ACE\_CDR::Boolean write\_string (\
         ACE\_CDR::ULong len,\
         const ACE\_CDR::Char \*x\
         );     ACE\_CDR::Boolean write\_string (const ACE\_CString &x);     ACE\_CDR::Boolean write\_wstring (const ACE\_CDR::WChar \*x);     ACE\_CDR::Boolean write\_wstring (\
         ACE\_CDR::ULong length,\
         const ACE\_CDR::WChar \*x\
         );     ACE\_CDR::Boolean write\_boolean\_array (\
         const ACE\_CDR::Boolean \*x,\
         ACE\_CDR::ULong length\
         );     ACE\_CDR::Boolean write\_char\_array (\
         const ACE\_CDR::Char \*x,\
         ACE\_CDR::ULong length\
         );     ACE\_CDR::Boolean write\_wchar\_array (\
         const ACE\_CDR::WChar\* x,\
         ACE\_CDR::ULong length\
         );     ACE\_CDR::Boolean write\_octet\_array (\
         const ACE\_CDR::Octet\* x,\
         ACE\_CDR::ULong length\
         );     ACE\_CDR::Boolean write\_short\_array (\
         const ACE\_CDR::Short \*x,\
         ACE\_CDR::ULong length\
         );     ACE\_CDR::Boolean write\_ushort\_array (\
         const ACE\_CDR::UShort \*x,\
         ACE\_CDR::ULong length\
         );     ACE\_CDR::Boolean write\_long\_array (\
         const ACE\_CDR::Long \*x,\
         ACE\_CDR::ULong length\
         );     ACE\_CDR::Boolean write\_ulong\_array (\
         const ACE\_CDR::ULong \*x,\
         ACE\_CDR::ULong length\
         );     ACE\_CDR::Boolean write\_longlong\_array (\
         const ACE\_CDR::LongLong\* x,\
         ACE\_CDR::ULong length\
         );     ACE\_CDR::Boolean write\_ulonglong\_array (\
         const ACE\_CDR::ULongLong \*x,\
         ACE\_CDR::ULong length\
         );     ACE\_CDR::Boolean write\_float\_array (\
         const ACE\_CDR::Float \*x,\
         ACE\_CDR::ULong length\
         );     ACE\_CDR::Boolean write\_double\_array (\
         const ACE\_CDR::Double \*x,\
         ACE\_CDR::ULong length\
         );     ACE\_CDR::Boolean write\_longdouble\_array (\
         const ACE\_CDR::LongDouble\* x,\
         ACE\_CDR::ULong length\
         );     ACE\_CDR::Boolean write\_octet\_array\_mb (\
         const ACE\_Message\_Block\* mb\
         );     ACE\_CDR::Boolean append\_boolean (ACE\_InputCDR &);     ACE\_CDR::Boolean append\_char (ACE\_InputCDR &);     ACE\_CDR::Boolean append\_wchar (ACE\_InputCDR &);     ACE\_CDR::Boolean append\_octet (ACE\_InputCDR &);     ACE\_CDR::Boolean append\_short (ACE\_InputCDR &);     ACE\_CDR::Boolean append\_ushort (ACE\_InputCDR &);     ACE\_CDR::Boolean append\_long (ACE\_InputCDR &);     ACE\_CDR::Boolean append\_ulong (ACE\_InputCDR &);     ACE\_CDR::Boolean append\_longlong (ACE\_InputCDR &);     ACE\_CDR::Boolean append\_ulonglong (ACE\_InputCDR &);     ACE\_CDR::Boolean append\_float (ACE\_InputCDR &);     ACE\_CDR::Boolean append\_double (ACE\_InputCDR &);     ACE\_CDR::Boolean append\_longdouble (ACE\_InputCDR &);     ACE\_CDR::Boolean append\_wstring (ACE\_InputCDR &);     ACE\_CDR::Boolean append\_string (ACE\_InputCDR &);     int good\_bit (void) const;     void reset (void);     size\_t total\_length (void) const;     const ACE\_Message\_Block \*begin (void) const;     const ACE\_Message\_Block \*end (void) const;     const ACE\_Message\_Block \*current (void) const;     const char \*buffer (void) const;     size\_t length (void) const;     int align\_write\_ptr (size\_t alignment);     ACE\_Char\_Codeset\_Translator \*char\_translator (void) const;     ACE\_WChar\_Codeset\_Translator \*wchar\_translator (void) const;\
   protected:     ACE\_Char\_Codeset\_Translator \*char\_translator\_;     ACE\_WChar\_Codeset\_Translator \*wchar\_translator\_;\
   private:     ACE\_OutputCDR (const ACE\_OutputCDR& rhs);     ACE\_OutputCDR& operator= (const ACE\_OutputCDR& rhs);     ACE\_CDR::Boolean write\_1 (const ACE\_CDR::Octet \*x);     ACE\_CDR::Boolean write\_2 (const ACE\_CDR::UShort \*x);     ACE\_CDR::Boolean write\_4 (const ACE\_CDR::ULong \*x);     ACE\_CDR::Boolean write\_8 (const ACE\_CDR::ULongLong \*x);     ACE\_CDR::Boolean write\_16 (const ACE\_CDR::LongDouble \*x);     ACE\_CDR::Boolean write\_array (\
         const void \*x,\
         size\_t size,\
         size\_t align,\
         ACE\_CDR::ULong length\
         );     int adjust (size\_t size, char \*&buf);     int adjust (size\_t size, size\_t align, char \*&buf);     int grow\_and\_adjust (size\_t size, size\_t align, char \*&buf);     int do\_byte\_swap (void) const;     ACE\_Message\_Block start\_;     ACE\_Message\_Block \*current\_;     int do\_byte\_swap\_;     int good\_bit\_;     size\_t memcpy\_tradeoff\_; };

## DESCRIPTION

ACE Common Data Representation (CDR) marshaling and demarshaling classes.

This implementation was inspired in the CDR class in SunSoft's IIOP engine, but has a completely different implementation and a different interface too.

The current implementation assumes that the host has 1-byte, 2-byte and 4-byte integral types, and that it has single precision and double precision IEEE floats. Those assumptions are pretty good these days, with Crays beign the only known exception.

## Special types.

These are needed for insertion and extraction of booleans, octets, chars, and bounded strings.

## We have one method per basic IDL type....

They return 0 on failure and 1 on success.

```
ACE_CDR::Boolean write_boolean (ACE_CDR::Boolean x);
```

```
ACE_CDR::Boolean write_char (ACE_CDR::Char x);
```

```
ACE_CDR::Boolean write_wchar (ACE_CDR::WChar x);
```

```
ACE_CDR::Boolean write_octet (ACE_CDR::Octet x);
```

```
ACE_CDR::Boolean write_short (ACE_CDR::Short x);
```

```
ACE_CDR::Boolean write_ushort (ACE_CDR::UShort x);
```

```
ACE_CDR::Boolean write_long (ACE_CDR::Long x);
```

```
ACE_CDR::Boolean write_ulong (ACE_CDR::ULong x);
```

```
ACE_CDR::Boolean write_longlong (const ACE_CDR::LongLong &x);
```

```
ACE_CDR::Boolean write_ulonglong (const ACE_CDR::ULongLong &x);
```

```
ACE_CDR::Boolean write_float (ACE_CDR::Float x);
```

```
ACE_CDR::Boolean write_double (const ACE_CDR::Double &x);
```

```
ACE_CDR::Boolean write_longdouble (const ACE_CDR::LongDouble &x);
```

## For string we offer methods that accept a precomputed length.

```
ACE_CDR::Boolean write_string (const ACE_CDR::Char *x);
```

```
ACE_CDR::Boolean write_string (
    ACE_CDR::ULong len,
    const ACE_CDR::Char *x
    );
```

```
ACE_CDR::Boolean write_string (const ACE_CString &x);
```

```
ACE_CDR::Boolean write_wstring (const ACE_CDR::WChar *x);
```

```
ACE_CDR::Boolean write_wstring (
    ACE_CDR::ULong length,
    const ACE_CDR::WChar *x
    );
```

## We add one method to write arrays of basic IDL types.

Note: the portion written starts at x and ends at x + length. The length is \*NOT\* stored into the CDR stream.

```
ACE_CDR::Boolean write_boolean_array (
    const ACE_CDR::Boolean *x,
    ACE_CDR::ULong length
    );
```

```
ACE_CDR::Boolean write_char_array (
    const ACE_CDR::Char *x,
    ACE_CDR::ULong length
    );
```

```
ACE_CDR::Boolean write_wchar_array (
    const ACE_CDR::WChar* x,
    ACE_CDR::ULong length
    );
```

```
ACE_CDR::Boolean write_octet_array (
    const ACE_CDR::Octet* x,
    ACE_CDR::ULong length
    );
```

```
ACE_CDR::Boolean write_short_array (
    const ACE_CDR::Short *x,
    ACE_CDR::ULong length
    );
```

```
ACE_CDR::Boolean write_ushort_array (
    const ACE_CDR::UShort *x,
    ACE_CDR::ULong length
    );
```

```
ACE_CDR::Boolean write_long_array (
    const ACE_CDR::Long *x,
    ACE_CDR::ULong length
    );
```

```
ACE_CDR::Boolean write_ulong_array (
    const ACE_CDR::ULong *x,
    ACE_CDR::ULong length
    );
```

```
ACE_CDR::Boolean write_longlong_array (
    const ACE_CDR::LongLong* x,
    ACE_CDR::ULong length
    );
```

```
ACE_CDR::Boolean write_ulonglong_array (
    const ACE_CDR::ULongLong *x,
    ACE_CDR::ULong length
    );
```

```
ACE_CDR::Boolean write_float_array (
    const ACE_CDR::Float *x,
    ACE_CDR::ULong length
    );
```

```
ACE_CDR::Boolean write_double_array (
    const ACE_CDR::Double *x,
    ACE_CDR::ULong length
    );
```

```
ACE_CDR::Boolean write_longdouble_array (
    const ACE_CDR::LongDouble* x,
    ACE_CDR::ULong length
    );
```

```
ACE_CDR::Boolean write_octet_array_mb (const ACE_Message_Block* mb);
```

Write an octet array contained inside a MB, this can be optimized to minimize copies.

## AUTHORS

Aniruddha Gokhale gokhale@cs.wustl.edu and Carlos O'Ryan coryan@cs.wustl.edu for the original implementation in TAO. ACE version by Jeff Parsons parsons@cs.wustl.edu and Istvan Buki istvan.buki@euronet.be. Codeset translation by Jim Rogers (jrogers@viasoft.com) and Carlos O'Ryan coryan@cs.wustl.edu

## LIBRARY

ace
