IdentityCodingSystem.cxx revision 7c478bd95313f5f23a4c958a745db2134aa03244
9512fe850e98fdd448c638ca63fdd92a8a510255ahl// Copyright (c) 1994 James Clark
9512fe850e98fdd448c638ca63fdd92a8a510255ahl// See the file COPYING for copying permission.
9512fe850e98fdd448c638ca63fdd92a8a510255ahl#pragma ident "%Z%%M% %I% %E% SMI"
9512fe850e98fdd448c638ca63fdd92a8a510255ahl
9512fe850e98fdd448c638ca63fdd92a8a510255ahl#include "splib.h"
9512fe850e98fdd448c638ca63fdd92a8a510255ahl#include "IdentityCodingSystem.h"
9512fe850e98fdd448c638ca63fdd92a8a510255ahl#include <limits.h>
9512fe850e98fdd448c638ca63fdd92a8a510255ahl
9512fe850e98fdd448c638ca63fdd92a8a510255ahl#ifdef SP_NAMESPACE
9512fe850e98fdd448c638ca63fdd92a8a510255ahlnamespace SP_NAMESPACE {
9512fe850e98fdd448c638ca63fdd92a8a510255ahl#endif
9512fe850e98fdd448c638ca63fdd92a8a510255ahl
9512fe850e98fdd448c638ca63fdd92a8a510255ahlclass IdentityDecoder : public Decoder {
9512fe850e98fdd448c638ca63fdd92a8a510255ahlpublic:
9512fe850e98fdd448c638ca63fdd92a8a510255ahl size_t decode(Char *to, const char *from, size_t fromLen,
9512fe850e98fdd448c638ca63fdd92a8a510255ahl const char **rest);
9512fe850e98fdd448c638ca63fdd92a8a510255ahl Boolean convertOffset(unsigned long &offset) const;
9512fe850e98fdd448c638ca63fdd92a8a510255ahl};
9512fe850e98fdd448c638ca63fdd92a8a510255ahl
9512fe850e98fdd448c638ca63fdd92a8a510255ahlclass IdentityEncoder : public RecoveringEncoder {
9512fe850e98fdd448c638ca63fdd92a8a510255ahlpublic:
9512fe850e98fdd448c638ca63fdd92a8a510255ahl IdentityEncoder();
9512fe850e98fdd448c638ca63fdd92a8a510255ahl void output(const Char *, size_t, OutputByteStream *);
9512fe850e98fdd448c638ca63fdd92a8a510255ahl void output(Char *tmp_char, size_t tmp_size_t, OutputByteStream *tmp_obs) {
9512fe850e98fdd448c638ca63fdd92a8a510255ahl output((const Char *)tmp_char, (size_t) tmp_size_t, (OutputByteStream *)tmp_obs);
9512fe850e98fdd448c638ca63fdd92a8a510255ahl }
9512fe850e98fdd448c638ca63fdd92a8a510255ahl};
9512fe850e98fdd448c638ca63fdd92a8a510255ahl
9512fe850e98fdd448c638ca63fdd92a8a510255ahlIdentityCodingSystem::IdentityCodingSystem()
9512fe850e98fdd448c638ca63fdd92a8a510255ahl{
9512fe850e98fdd448c638ca63fdd92a8a510255ahl}
9512fe850e98fdd448c638ca63fdd92a8a510255ahl
9512fe850e98fdd448c638ca63fdd92a8a510255ahlDecoder *IdentityCodingSystem::makeDecoder() const
9512fe850e98fdd448c638ca63fdd92a8a510255ahl{
9512fe850e98fdd448c638ca63fdd92a8a510255ahl return new IdentityDecoder;
9512fe850e98fdd448c638ca63fdd92a8a510255ahl}
9512fe850e98fdd448c638ca63fdd92a8a510255ahl
9512fe850e98fdd448c638ca63fdd92a8a510255ahlEncoder *IdentityCodingSystem::makeEncoder() const
9512fe850e98fdd448c638ca63fdd92a8a510255ahl{
9512fe850e98fdd448c638ca63fdd92a8a510255ahl return new IdentityEncoder;
9512fe850e98fdd448c638ca63fdd92a8a510255ahl}
9512fe850e98fdd448c638ca63fdd92a8a510255ahl
9512fe850e98fdd448c638ca63fdd92a8a510255ahlBoolean IdentityCodingSystem::isIdentity() const
9512fe850e98fdd448c638ca63fdd92a8a510255ahl{
9512fe850e98fdd448c638ca63fdd92a8a510255ahl return 1;
9512fe850e98fdd448c638ca63fdd92a8a510255ahl}
9512fe850e98fdd448c638ca63fdd92a8a510255ahl
9512fe850e98fdd448c638ca63fdd92a8a510255ahlsize_t IdentityDecoder::decode(Char *to, const char *from, size_t fromLen,
9512fe850e98fdd448c638ca63fdd92a8a510255ahl const char **rest)
9512fe850e98fdd448c638ca63fdd92a8a510255ahl{
9512fe850e98fdd448c638ca63fdd92a8a510255ahl if (sizeof(Char) == sizeof(char) && from == (char *)to) {
*rest = from + fromLen;
return fromLen;
}
for (size_t n = fromLen; n > 0; n--)
*to++ = (unsigned char)*from++; // zero extend
*rest = from;
return fromLen;
}
Boolean IdentityDecoder::convertOffset(unsigned long &) const
{
return true;
}
IdentityEncoder::IdentityEncoder()
{
}
void IdentityEncoder::output(const Char *s, size_t n, OutputByteStream *sb)
{
if (sizeof(Char) != sizeof(char)) {
for (size_t i = 0; i < n; i++) {
Char c = s[i];
if (c > UCHAR_MAX)
handleUnencodable(c, sb);
else
sb->sputc((unsigned char)c);
}
}
else
sb->sputn((const char *)s, n);
}
#ifdef SP_NAMESPACE
}
#endif