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

📄 contain.cxx

📁 radius协议源码÷The Radius Stack will connect to a Radius Server. This stack implementation is built upo
💻 CXX
📖 第 1 页 / 共 4 页
字号:
PBYTEArray PString::ToPascal() const{  PINDEX len = GetLength();  PAssert(len < 256, "Cannot convert to PASCAL string");  BYTE buf[256];  buf[0] = (BYTE)len;#ifdef PHAS_UNICODE  WORD * ptr = (WORD *)theArray;  while (len > 0) {    buf[len] = (BYTE)(*ptr < 256 ? *ptr : 255);    len--;  }#else  memcpy(&buf[1], theArray, len);#endif  return PBYTEArray(buf, len+1);}PString PString::ToLiteral() const{  PString str('"');  for (char * p = theArray; *p != '\0'; p++) {    if (*p == '"')      str += "\\\"";    else if (isprint(*p))      str += *p;    else {      PINDEX i;      for (i = 0; i < PARRAYSIZE(PStringEscapeValue); i++) {        if (*p == PStringEscapeValue[i]) {          str += PString('\\') + PStringEscapeCode[i];          break;        }      }      if (i >= PARRAYSIZE(PStringEscapeValue))        str.sprintf("\\%03o", *p & 0xff);    }  }  return str + '"';}PString & PString::sprintf(const char * fmt, ...){  va_list args;  va_start(args, fmt);  return vsprintf(fmt, args);}PString & PString::vsprintf(const char * fmt, va_list arg){  char * p = GetPointer(1000);  ::vsprintf(p+strlen(p), fmt, arg);  PAssert(strlen(theArray) < 1000, "Single sprintf() too large");  PAssert(MakeMinimumSize(), POutOfMemory);  return *this;}PString psprintf(const char * fmt, ...){  PString str;  va_list args;  va_start(args, fmt);  return str.vsprintf(fmt, args);}PString pvsprintf(const char * fmt, va_list arg){  PString str;  return str.vsprintf(fmt, arg);}///////////////////////////////////////////////////////////////////////////////PObject * PCaselessString::Clone() const{  return new PCaselessString(*this);}PObject::Comparison PCaselessString::InternalCompare(PINDEX offset, char c) const{  int c1 = toupper(theArray[offset]);  int c2 = toupper(c);  if (c1 < c2)    return LessThan;  if (c1 > c2)    return GreaterThan;  return EqualTo;}PObject::Comparison PCaselessString::InternalCompare(                         PINDEX offset, PINDEX length, const char * cstr) const{  PAssertNULL(cstr);  while (length-- > 0 && (theArray[offset] != '\0' || *cstr != '\0')) {    Comparison c = PCaselessString::InternalCompare(offset++, *cstr++);    if (c != EqualTo)      return c;  }  return EqualTo;}///////////////////////////////////////////////////////////////////////////////int PStringStream::Buffer::overflow(int c){  if (pptr() >= epptr()) {    int gpos = gptr() - eback();    int ppos = pptr() - pbase();    char * newptr = string->GetPointer(string->GetSize() + 32);    setp(newptr, newptr + string->GetSize() - 1);    pbump(ppos);    setg(newptr, newptr + gpos, newptr + ppos);  }  if (c != EOF) {    *pptr() = (char)c;    pbump(1);  }  return 0;}int PStringStream::Buffer::underflow(){  return gptr() >= egptr() ? EOF : *gptr();}int PStringStream::Buffer::sync(){  string->MakeMinimumSize();  char * base = string->GetPointer();  char * end = base + string->GetLength();  setg(base, base, end);  setp(end, end);  return 0;}streampos PStringStream::Buffer::seekoff(streamoff off,#ifdef __MWERKS__                                 ios::seekdir dir, ios::openmode mode)#else                                 ios::seek_dir dir, int mode)#endif{  int len = string->GetLength();  int gpos = gptr() - eback();  int ppos = pptr() - pbase();  char * newgptr;  char * newpptr;  switch (dir) {    case ios::beg :      if (off < 0)        newpptr = newgptr = eback();      else if (off >= len)        newpptr = newgptr = egptr();      else        newpptr = newgptr = eback()+off;      break;    case ios::cur :      if (off < -ppos)        newpptr = eback();      else if (off >= len-ppos)        newpptr = epptr();      else        newpptr = pptr()+off;      if (off < -gpos)        newgptr = eback();      else if (off >= len-gpos)        newgptr = egptr();      else        newgptr = gptr()+off;      break;    case ios::end :      if (off < -len)        newpptr = newpptr = newgptr = eback();      else if (off >= 0)        newpptr = newgptr = egptr();      else        newpptr = newgptr = egptr()+off;      break;    default:      PAssertAlways(PInvalidParameter);      newgptr = gptr();      newpptr = pptr();  }  if ((mode&ios::in) != 0)    setg(eback(), newgptr, egptr());  if ((mode&ios::out) != 0)    setp(newpptr, epptr());  return 0;}PStringStream::PStringStream(){  init(new PStringStream::Buffer(this));}PStringStream::PStringStream(const PString & str)  : PString(str){  init(new PStringStream::Buffer(this));}PStringStream::PStringStream(const char * cstr)  : PString(cstr){  init(new PStringStream::Buffer(this));}PStringStream & PStringStream::operator=(const char * cstr){  PString::operator=(cstr);  flush();  return *this;}PStringStream & PStringStream::operator=(const PString & str){  PString::operator=(str);  flush();  return *this;}PStringStream::~PStringStream(){  delete (PStringStream::Buffer *)rdbuf();  init(NULL);}///////////////////////////////////////////////////////////////////////////////PStringArray::PStringArray(PINDEX count, char const * const * strarr, BOOL caseless){  if (count == 0)    return;  PAssertNULL(strarr);  SetSize(count);  for (PINDEX i = 0; i < count; i++) {    PString * newString;    if (caseless)      newString = new PCaselessString(strarr[i]);    else      newString = new PString(strarr[i]);    SetAt(i, newString);  }}PString & PStringArray::operator[](PINDEX index){  PASSERTINDEX(index);  PAssert(SetMinSize(index+1), POutOfMemory);  if ((*theArray)[index] == NULL)    (*theArray)[index] = new PString;  return *(PString *)(*theArray)[index];}///////////////////////////////////////////////////////////////////////////////PStringList::PStringList(PINDEX count, char const * const * strarr, BOOL caseless){  if (count == 0)    return;  PAssertNULL(strarr);  for (PINDEX i = 0; i < count; i++) {    PString * newString;    if (caseless)      newString = new PCaselessString(strarr[i]);    else      newString = new PString(strarr[i]);    Append(newString);  }}///////////////////////////////////////////////////////////////////////////////PSortedStringList::PSortedStringList(PINDEX count,                                     char const * const * strarr,                                     BOOL caseless){  if (count == 0)    return;  PAssertNULL(strarr);  for (PINDEX i = 0; i < count; i++) {    PString * newString;    if (caseless)      newString = new PCaselessString(strarr[i]);    else      newString = new PString(strarr[i]);    Append(newString);  }}///////////////////////////////////////////////////////////////////////////////PStringSet::PStringSet(PINDEX count, char const * const * strarr, BOOL caseless){  if (count == 0)    return;  PAssertNULL(strarr);  for (PINDEX i = 0; i < count; i++) {    if (caseless)      Include(PCaselessString(strarr[i]));    else      Include(PString(strarr[i]));  }}///////////////////////////////////////////////////////////////////////////////POrdinalToString::POrdinalToString(PINDEX count, const Initialiser * init){  while (count-- > 0) {    SetAt(init->key, init->value);    init++;  }}///////////////////////////////////////////////////////////////////////////////PStringToOrdinal::PStringToOrdinal(PINDEX count,                                   const Initialiser * init,                                   BOOL caseless){  while (count-- > 0) {    if (caseless)      SetAt(PCaselessString(init->key), init->value);    else      SetAt(init->key, init->value);    init++;  }}///////////////////////////////////////////////////////////////////////////////PStringToString::PStringToString(PINDEX count,                                 const Initialiser * init,                                 BOOL caselessKeys,                                 BOOL caselessValues){  while (count-- > 0) {    if (caselessValues)      if (caselessKeys)        SetAt(PCaselessString(init->key), PCaselessString(init->value));      else        SetAt(init->key, PCaselessString(init->value));    else      if (caselessKeys)        SetAt(PCaselessString(init->key), init->value);      else        SetAt(init->key, init->value);    init++;  }}///////////////////////////////////////////////////////////////////////////////PRegularExpression::PRegularExpression(){  lastError = NotCompiled;  expression = NULL;}PRegularExpression::PRegularExpression(const PString & pattern, int flags){  expression = NULL;  Compile(pattern, flags);}PRegularExpression::PRegularExpression(const char * pattern, int flags){  expression = NULL;  Compile(pattern, flags);}PRegularExpression::~PRegularExpression(){  if (expression != NULL) {    regfree(expression);    delete expression;  }}PRegularExpression::ErrorCodes PRegularExpression::GetErrorCode() const{  return (ErrorCodes)lastError;}PString PRegularExpression::GetErrorText() const{  PString str;  regerror(lastError, expression, str.GetPointer(256), 256);  return str;}BOOL PRegularExpression::Compile(const PString & pattern, int flags){  return Compile((const char *)pattern, flags);}BOOL PRegularExpression::Compile(const char * pattern, int flags){  if (expression != NULL) {    regfree(expression);    delete expression;  }  if (pattern == NULL || *pattern == '\0')    return BadPattern;  expression = new regex_t;  lastError = regcomp(expression, pattern, flags);  return lastError == NoError;}BOOL PRegularExpression::Execute(const PString & str, PINDEX & start, int flags) const{  PINDEX dummy;  return Execute((const char *)str, start, dummy, flags);}BOOL PRegularExpression::Execute(const PString & str, PINDEX & start, PINDEX & len, int flags) const{  return Execute((const char *)str, start, len, flags);}BOOL PRegularExpression::Execute(const char * cstr, PINDEX & start, int flags) const{  PINDEX dummy;  return Execute(cstr, start, dummy, flags);}BOOL PRegularExpression::Execute(const char * cstr, PINDEX & start, PINDEX & len, int flags) const{  if (expression == NULL) {    ((PRegularExpression*)this)->lastError = NotCompiled;    return FALSE;  }  regmatch_t match;  ((PRegularExpression*)this)->lastError = regexec(expression, cstr, 1, &match, flags);  if (lastError != NoError)    return FALSE;  start = match.rm_so;  len = match.rm_eo - start;  return TRUE;}BOOL PRegularExpression::Execute(const PString & str, PIntArray & starts, int flags) const{  PIntArray dummy;  return Execute((const char *)str, starts, dummy, flags);}BOOL PRegularExpression::Execute(const PString & str,                                 PIntArray & starts,                                 PIntArray & ends,                                 int flags) const{  return Execute((const char *)str, starts, ends, flags);}BOOL PRegularExpression::Execute(const char * cstr, PIntArray & starts, int flags) const{  PIntArray dummy;  return Execute(cstr, starts, dummy, flags);}BOOL PRegularExpression::Execute(const char * cstr,                                 PIntArray & starts,                                 PIntArray & ends,                                 int flags) const{  if (expression == NULL) {    ((PRegularExpression*)this)->lastError = NotCompiled;    return FALSE;  }  regmatch_t single_match;  regmatch_t * matches = &single_match;  PINDEX count = starts.GetSize();  if (count > 1)    matches = new regmatch_t[count];  else    count = 1;  ((PRegularExpression*)this)->lastError = regexec(expression, cstr, count, matches, flags);  if (lastError == NoError) {    starts.SetMinSize(count);    ends.SetMinSize(count);    for (PINDEX i = 0; i < count; i++) {      starts[i] = matches[i].rm_so;      ends[i] = matches[i].rm_eo;    }  }  if (matches != &single_match)    delete [] matches;  return lastError == NoError;}PString PRegularExpression::EscapeString(const PString & str){  PString translated;  PINDEX lastPos = 0;  PINDEX nextPos;  while ((nextPos = str.FindOneOf("\\^$+?*.[]()|{}", lastPos+1)) != P_MAX_INDEX) {    translated += str(lastPos, nextPos-1) + "\\";    lastPos = nextPos;  }  if (lastPos == 0)    return str;  return translated + str.Mid(lastPos);}// End Of File ///////////////////////////////////////////////////////////////

⌨️ 快捷键说明

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