---
name: "ACE_Char_Codeset_Translator"
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_Char_Codeset_Translator"
---

# ACE\_Char\_Codeset\_Translator(3)

Codeset translation routines common to both Output and Input CDR streams.

## NAME

ACE\_Char\_Codeset\_Translator -  Codeset translation routines common to both Output and Input CDR streams.

## SYNOPSIS

```
#include <ace/CDR_Stream.h>
class ACE_Char_Codeset_Translator
{
  public:
    virtual ACE_CDR::Boolean read_char (
        ACE_InputCDR&,
        ACE_CDR::Char&
        ) = 0;
    virtual ACE_CDR::Boolean read_string (
        ACE_InputCDR&,
        ACE_CDR::Char *&
        ) = 0;
    virtual ACE_CDR::Boolean read_char_array (
        ACE_InputCDR&,
        ACE_CDR::Char*,
        ACE_CDR::ULong
        ) = 0;
    virtual ACE_CDR::Boolean write_char (
        ACE_OutputCDR&,
        ACE_CDR::Char
        ) = 0;
    virtual ACE_CDR::Boolean write_string (
        ACE_OutputCDR&,
        ACE_CDR::ULong,
        const ACE_CDR::Char*
        ) = 0;
    virtual ACE_CDR::Boolean write_char_array (
        ACE_OutputCDR&,
        const ACE_CDR::Char*,
        ACE_CDR::ULong
        ) = 0;
  protected:
    ACE_CDR::Boolean read_1 (ACE_InputCDR& input, ACE_CDR::Octet *x);
    ACE_CDR::Boolean write_1 (
        ACE_OutputCDR& output,
        const ACE_CDR::Octet *x
        );
    ACE_CDR::Boolean read_array (
        ACE_InputCDR& input,
        void* x,
        size_t size,
        size_t align,
        ACE_CDR::ULong length
        );
    ACE_CDR::Boolean write_array (
        ACE_OutputCDR& output,
        const void *x,
        size_t size,
        size_t align,
        ACE_CDR::ULong length
        );
    int adjust (
        ACE_OutputCDR& out,
        size_t size,
        size_t align,
        char *&buf
        );
    void good_bit (ACE_OutputCDR& out, int bit);
};
```

## 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.

## PUBLIC MEMBERS

```
virtual ACE_CDR::Boolean read_char (
    ACE_InputCDR&,
    ACE_CDR::Char&
    ) = 0;
```

Read a single character from the stream, converting from the stream codeset to the native codeset

```
virtual ACE_CDR::Boolean read_string (
    ACE_InputCDR&,
    ACE_CDR::Char *&
    ) = 0;
```

Read a string from the stream, including the length, converting the characters from the stream codeset to the native codeset

```
virtual ACE_CDR::Boolean read_char_array (
    ACE_InputCDR&,
    ACE_CDR::Char*,
    ACE_CDR::ULong
    ) = 0;
```

Read an array of characters from the stream, converting the characters from the stream codeset to the native codeset.

```
virtual ACE_CDR::Boolean write_char (
    ACE_OutputCDR&,
    ACE_CDR::Char
    ) = 0;
```

Write a single character to the stream, converting from the native codeset to the stream codeset

```
virtual ACE_CDR::Boolean write_string (
    ACE_OutputCDR&,
    ACE_CDR::ULong,
    const ACE_CDR::Char*
    ) = 0;
```

Write a string to the stream, including the length, converting from the native codeset to the stream codeset

```
virtual ACE_CDR::Boolean write_char_array (
    ACE_OutputCDR&,
    const ACE_CDR::Char*,
    ACE_CDR::ULong
    ) = 0;
```

Write an array of characters to the stream, converting from the native codeset to the stream codeset

## PROTECTED MEMBERS

```
ACE_CDR::Boolean read_1 (ACE_InputCDR& input, ACE_CDR::Octet *x);
```

```
ACE_CDR::Boolean write_1 (
    ACE_OutputCDR& output,
    const ACE_CDR::Octet *x
    );
```

Children have access to low-level routines because they cannot use read\_char or something similar (it would recurse).

```
ACE_CDR::Boolean read_array (
    ACE_InputCDR& input,
    void* x,
    size_t size,
    size_t align,
    ACE_CDR::ULong length
    );
```

Efficiently read length elements of size size each from input into x; the data must be aligned to align.

```
ACE_CDR::Boolean write_array (
    ACE_OutputCDR& output,
    const void *x,
    size_t size,
    size_t align,
    ACE_CDR::ULong length
    );
```

Efficiently write length elements of size size from x into output. Before inserting the elements enough padding is added to ensure that the elements will be aligned to align in the stream.

```
int adjust (
    ACE_OutputCDR& out,
    size_t size,
    size_t align,
    char *&buf
    );
```

Exposes the stream implementation of adjust, this is useful in many cases to minimize memory allocations during marshaling. On success buf will contain a contiguous area in the CDR stream that can hold size bytes aligned to align. Results

```
void good_bit (ACE_OutputCDR& out, int bit);
```

Used by derived classes to set errors in the CDR stream.

## 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
