identitycodingsystem.cxx

来自「SP是一个基于GNU C++编译器」· CXX 代码 · 共 84 行

CXX
84
字号
// Copyright (c) 1994 James Clark// See the file COPYING for copying permission.#include "splib.h"#include "IdentityCodingSystem.h"#include <limits.h>#ifdef SP_NAMESPACEnamespace SP_NAMESPACE {#endifclass IdentityDecoder : public Decoder {public:  size_t decode(Char *to, const char *from, size_t fromLen,		const char **rest);  Boolean convertOffset(unsigned long &offset) const;};class IdentityEncoder : public RecoveringEncoder {public:  IdentityEncoder();  void output(const Char *, size_t, OutputByteStream *);};IdentityCodingSystem::IdentityCodingSystem(){}Decoder *IdentityCodingSystem::makeDecoder() const{  return new IdentityDecoder;}Encoder *IdentityCodingSystem::makeEncoder() const{  return new IdentityEncoder;}Boolean IdentityCodingSystem::isIdentity() const{  return 1;}size_t IdentityDecoder::decode(Char *to, const char *from, size_t fromLen,			       const char **rest){  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

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?