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

📄 contain.cxx

📁 pwlib源码库
💻 CXX
📖 第 1 页 / 共 5 页
字号:
    strm.write(theArray, GetSize());  while (width-- > 0)    strm << (char)strm.fill();  if (!left)    strm.write(theArray, GetSize());}void PCharArray::ReadFrom(istream &strm){  PINDEX size = 0;  SetSize(size+100);  while (strm.good()) {    strm >> theArray[size++];    if (size >= GetSize())      SetSize(size+100);  }  SetSize(size);}void PBYTEArray::PrintOn(ostream & strm) const{  PINDEX line_width = strm.width();  if (line_width == 0)    line_width = 16;  strm.width(0);  PINDEX indent = strm.precision();  PINDEX val_width = ((strm.flags()&ios::basefield) == ios::hex) ? 2 : 3;  PINDEX i = 0;  while (i < GetSize()) {    if (i > 0)      strm << '\n';    PINDEX j;    for (j = 0; j < indent; j++)      strm << ' ';    for (j = 0; j < line_width; j++) {      if (j == line_width/2)        strm << ' ';      if (i+j < GetSize())        strm << setw(val_width) << (theArray[i+j]&0xff);      else {        PINDEX k;        for (k = 0; k < val_width; k++)          strm << ' ';      }      strm << ' ';    }    if ((strm.flags()&ios::floatfield) != ios::fixed) {      strm << "  ";      for (j = 0; j < line_width; j++) {        if (i+j < GetSize()) {          unsigned val = theArray[i+j]&0xff;          if (isprint(val))            strm << (char)val;          else            strm << '.';        }      }    }    i += line_width;  }}void PBYTEArray::ReadFrom(istream &strm){  PINDEX size = 0;  SetSize(size+100);  while (strm.good()) {    unsigned v;    strm >> v;    theArray[size] = (BYTE)v;    if (!strm.fail()) {      size++;      if (size >= GetSize())        SetSize(size+100);    }  }  SetSize(size);}///////////////////////////////////////////////////////////////////////////////PBitArray::PBitArray(PINDEX initialSize)  : PBYTEArray((initialSize+7)>>3){}PBitArray::PBitArray(const void * buffer,                     PINDEX length,                     BOOL dynamic)  : PBYTEArray((const BYTE *)buffer, (length+7)>>3, dynamic){}PObject * PBitArray::Clone() const{  return new PBitArray(*this);}PINDEX PBitArray::GetSize() const{  return PBYTEArray::GetSize()<<3;}BOOL PBitArray::SetSize(PINDEX newSize){  return PBYTEArray::SetSize((newSize+7)>>3);}BOOL PBitArray::SetAt(PINDEX index, BOOL val){  if (!SetMinSize(index+1))    return FALSE;  if (val)    theArray[index>>3] |= (1 << (index&7));  else    theArray[index>>3] &= ~(1 << (index&7));  return TRUE;}BOOL PBitArray::GetAt(PINDEX index) const{  PASSERTINDEX(index);  if (index >= GetSize())    return FALSE;  return (theArray[index>>3]&(1 << (index&7))) != 0;}void PBitArray::Attach(const void * buffer, PINDEX bufferSize){  PBYTEArray::Attach((const BYTE *)buffer, (bufferSize+7)>>3);}BYTE * PBitArray::GetPointer(PINDEX minSize){  return PBYTEArray::GetPointer((minSize+7)>>3);}BOOL PBitArray::Concatenate(const PBitArray & array){  return PAbstractArray::Concatenate(array);}///////////////////////////////////////////////////////////////////////////////PString::PString(const char * cstr)  : PCharArray(cstr != NULL ? strlen(cstr)+1 : 1){  if (cstr != NULL)    memcpy(theArray, cstr, GetSize());}PString::PString(const WORD * ustr){  if (ustr == NULL)    SetSize(1);  else {    PINDEX len = 0;    while (ustr[len] != 0)      len++;    InternalFromUCS2(ustr, len);  }}PString::PString(const char * cstr, PINDEX len)  : PCharArray(len+1){  if (len > 0)    memcpy(theArray, PAssertNULL(cstr), len);}PString::PString(const WORD * ustr, PINDEX len)  : PCharArray(len+1){  InternalFromUCS2(ustr, len);}PString::PString(const PWORDArray & ustr){  InternalFromUCS2(ustr, ustr.GetSize());}static int TranslateHex(char x){  if (x >= 'a')    return x - 'a' + 10;  if (x >= 'A')    return x - 'A' + '\x0a';  return x - '0';}static const unsigned char PStringEscapeCode[]  = {  'a',  'b',  'f',  'n',  'r',  't',  'v' };static const unsigned char PStringEscapeValue[] = { '\a', '\b', '\f', '\n', '\r', '\t', '\v' };static void TranslateEscapes(const char * src, char * dst){  if (*src == '"')    src++;  while (*src != '\0') {    int c = *src++ & 0xff;    if (c == '"' && *src == '\0')      c  = '\0'; // Trailing '"' is ignored    else if (c == '\\') {      c = *src++ & 0xff;      for (PINDEX i = 0; i < PARRAYSIZE(PStringEscapeCode); i++) {        if (c == PStringEscapeCode[i])          c = PStringEscapeValue[i];      }      if (c == 'x' && isxdigit(*src & 0xff)) {        c = TranslateHex(*src++);        if (isxdigit(*src & 0xff))          c = (c << 4) + TranslateHex(*src++);      }      else if (c >= '0' && c <= '7') {        int count = c <= '3' ? 3 : 2;        src--;        c = 0;        do {          c = (c << 3) + *src++ - '0';        } while (--count > 0 && *src >= '0' && *src <= '7');      }    }    *dst++ = (char)c;  }}PString::PString(ConversionType type, const char * str, ...){  switch (type) {    case Pascal :      if (*str != '\0') {        PINDEX len = *str & 0xff;        PAssert(SetSize(len+1), POutOfMemory);        memcpy(theArray, str+1, len);      }      break;    case Basic :      if (str[0] != '\0' && str[1] != '\0') {        PINDEX len = (str[0] & 0xff) | ((str[1] & 0xff) << 8);        PAssert(SetSize(len+1), POutOfMemory);        memcpy(theArray, str+2, len);      }      break;    case Literal :      PAssert(SetSize(strlen(str)+1), POutOfMemory);      TranslateEscapes(str, theArray);      PAssert(MakeMinimumSize(), POutOfMemory);      break;    case Printf : {      va_list args;      va_start(args, str);      vsprintf(str, args);      va_end(args);      break;    }    default :      PAssertAlways(PInvalidParameter);  }}template <class T> char * p_unsigned2string(T value, T base, char * str){  if (value >= base)    str = p_unsigned2string<T>(value/base, base, str);  value %= base;  if (value < 10)    *str = (char)(value + '0');  else    *str = (char)(value + 'A'-10);  return str+1;}template <class T> char * p_signed2string(T value, T base, char * str){  if (value >= 0)    return p_unsigned2string<T>(value, base, str);  *str = '-';  return p_unsigned2string<T>(-value, base, str+1);}PString::PString(short n)  : PCharArray(sizeof(short)*3+1){  p_signed2string<int>(n, 10, theArray);  MakeMinimumSize();}PString::PString(unsigned short n)  : PCharArray(sizeof(unsigned short)*3+1){  p_unsigned2string<unsigned int>(n, 10, theArray);  MakeMinimumSize();}PString::PString(int n)  : PCharArray(sizeof(int)*3+1){  p_signed2string<int>(n, 10, theArray);  MakeMinimumSize();}PString::PString(unsigned int n)  : PCharArray(sizeof(unsigned int)*3+1){  p_unsigned2string<unsigned int>(n, 10, theArray);  MakeMinimumSize();}PString::PString(long n)  : PCharArray(sizeof(long)*3+1){  p_signed2string<long>(n, 10, theArray);  MakeMinimumSize();}PString::PString(unsigned long n)  : PCharArray(sizeof(unsigned long)*3+1){  p_unsigned2string<unsigned long>(n, 10, theArray);  MakeMinimumSize();}PString::PString(PInt64 n)  : PCharArray(sizeof(PInt64)*3+1){  p_signed2string<PInt64>(n, 10, theArray);  MakeMinimumSize();}PString::PString(PUInt64 n)  : PCharArray(sizeof(PUInt64)*3+1){  p_unsigned2string<PUInt64>(n, 10, theArray);  MakeMinimumSize();}PString::PString(ConversionType type, long value, unsigned base)  : PCharArray(sizeof(long)*3+1){  PAssert(base >= 2 && base <= 36, PInvalidParameter);  switch (type) {    case Signed :      p_signed2string<long>(value, base, theArray);      break;    case Unsigned :      p_unsigned2string<unsigned long>(value, base, theArray);      break;    default :      PAssertAlways(PInvalidParameter);  }  MakeMinimumSize();}PString::PString(ConversionType type, double value, unsigned places){  switch (type) {    case Decimal :      sprintf("%0.*f", (int)places, value);      break;    case Exponent :      sprintf("%0.*e", (int)places, value);      break;    default :      PAssertAlways(PInvalidParameter);  }}PString & PString::operator=(short n){  SetMinSize(sizeof(short)*3+1);  p_signed2string<int>(n, 10, theArray);  MakeMinimumSize();  return *this;}PString & PString::operator=(unsigned short n){  SetMinSize(sizeof(unsigned short)*3+1);  p_unsigned2string<unsigned int>(n, 10, theArray);  MakeMinimumSize();  return *this;}PString & PString::operator=(int n){  SetMinSize(sizeof(int)*3+1);  p_signed2string<int>(n, 10, theArray);  MakeMinimumSize();  return *this;}PString & PString::operator=(unsigned int n){  SetMinSize(sizeof(unsigned int)*3+1);  p_unsigned2string<unsigned int>(n, 10, theArray);  MakeMinimumSize();  return *this;}PString & PString::operator=(long n){  SetMinSize(sizeof(long)*3+1);  p_signed2string<long>(n, 10, theArray);  MakeMinimumSize();  return *this;}PString & PString::operator=(unsigned long n){  SetMinSize(sizeof(unsigned long)*3+1);  p_unsigned2string<unsigned long>(n, 10, theArray);  MakeMinimumSize();  return *this;}PString & PString::operator=(PInt64 n){  SetMinSize(sizeof(PInt64)*3+1);  p_signed2string<PInt64>(n, 10, theArray);  MakeMinimumSize();  return *this;}PString & PString::operator=(PUInt64 n){  SetMinSize(sizeof(PUInt64)*3+1);  p_unsigned2string<PUInt64>(n, 10, theArray);  MakeMinimumSize();  return *this;}PString & PString::MakeEmpty(){  SetSize(1);  *theArray = '\0';  return *this;}PObject * PString::Clone() const{  return new PString(*this);}void PString::PrintOn(ostream &strm) const{  strm << theArray;}void PString::ReadFrom(istream &strm){  SetMinSize(100);  char * ptr = theArray;  PINDEX len = 0;  int c;  while ((c = strm.get()) != EOF && c != '\n') {    *ptr++ = (char)c;    len++;    if (len >= GetSize()) {      SetSize(len + 100);      ptr = theArray + len;

⌨️ 快捷键说明

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