⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 swibufferedoutputstream.cpp

📁 OSB-PIK-OpenVXI-3.0.0源代码 “中国XML论坛 - 专业的XML技术讨论区--XML在语音技术中的应用”
💻 CPP
字号:
 /****************License************************************************  *  * Copyright 2000-2003.  ScanSoft, Inc.      *  * Use of this software is subject to notices and obligations set forth   * in the SpeechWorks Public License - Software Version 1.2 which is   * included with this software.   *  * ScanSoft is a registered trademark of ScanSoft, Inc., and OpenSpeech,   * SpeechWorks and the SpeechWorks logo are registered trademarks or   * trademarks of SpeechWorks International, Inc. in the United States   * and other countries.  *  ***********************************************************************/  #include "SWIbufferedOutputStream.hpp" #include <cstdio>  SWIbufferedOutputStream::SWIbufferedOutputStream(SWIoutputStream *outStream,                                                  int bufferSize,                                                  bool ownStream):   SWIfilterOutputStream(outStream, ownStream),   _buffer(NULL), _pos(NULL), _end(NULL) {   if (bufferSize < 1) bufferSize = 1;   _buffer = new char[bufferSize];   _pos = _buffer;   _end = _pos + bufferSize; }  SWIbufferedOutputStream::~SWIbufferedOutputStream() {   flush();   if (isOwner()) close(); }  SWIstream::Result SWIbufferedOutputStream::close() {   Result rc1 = flush();   Result rc2 = SWIfilterOutputStream::close();    delete [] _buffer;   _pos = _end = _buffer = NULL;   return rc1 == SUCCESS ? rc2 : rc1; }   int SWIbufferedOutputStream::writeBytes(const void *data, int dataSize) {   if (_buffer == NULL) return SWIstream::ILLEGAL_STATE;   const char *p = static_cast<const char *>(data);   const char *q = p + dataSize;   int nbWritten = 0;    while (p < q)   {     while (_pos < _end && p < q)     {       *_pos++ = *p++;       nbWritten++;     }      SWIstream::Result rc;     if (p < q && (rc = flushBuffer()) != SWIstream::SUCCESS)       return rc;   }   return nbWritten; }  SWIstream::Result SWIbufferedOutputStream::printString(const char *s) {   if (_buffer == NULL) return SWIstream::ILLEGAL_STATE;    const char *p = s;    while (*p)   {     while (_pos < _end && *p) *_pos++ = *p++;      SWIstream::Result rc;     if (*p && (rc = flushBuffer()) != SWIstream::SUCCESS)       return rc;   }   return SWIstream::SUCCESS; }  SWIstream::Result  SWIbufferedOutputStream::printChar(char c) {   if (_buffer == NULL) return SWIstream::ILLEGAL_STATE;    SWIstream::Result rc;   if (_pos == _end && (rc = flushBuffer()) != SWIstream::SUCCESS)     return rc;    *_pos++ = c;   return SWIstream::SUCCESS; }  SWIstream::Result SWIbufferedOutputStream::flush() {   if (_buffer == NULL) return SWIstream::ILLEGAL_STATE;   return flushBuffer(); }  bool SWIbufferedOutputStream::isBuffered() const {   return true; }  SWIstream::Result SWIbufferedOutputStream::flushBuffer() {   int len = _pos - _buffer;   _pos = _buffer;    if (len == 0)     return SWIstream::SUCCESS;    int rc = SWIfilterOutputStream::writeBytes(_buffer, len);    if (len == rc)     return SWIstream::SUCCESS;    if (rc >= 0)     return SWIstream::WRITE_ERROR;    return SWIstream::Result(rc); }

⌨️ 快捷键说明

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