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

📄 asner.cxx

📁 pwlib源码库
💻 CXX
📖 第 1 页 / 共 5 页
字号:
{  PBYTEArray dummy;  CommonEncode(dummy);  return dummy.GetSize();}BOOL PASN_ObjectId::Decode(PASN_Stream & strm){  return strm.ObjectIdDecode(*this);}void PASN_ObjectId::Encode(PASN_Stream & strm) const{  strm.ObjectIdEncode(*this);}///////////////////////////////////////////////////////////////////////PASN_BitString::PASN_BitString(unsigned nBits, const BYTE * buf)  : PASN_ConstrainedObject(UniversalBitString, UniversalTagClass),    totalBits(nBits),    bitData((totalBits+7)/8){  if (buf != NULL)    memcpy(bitData.GetPointer(), buf, bitData.GetSize());}PASN_BitString::PASN_BitString(unsigned tag, TagClass tagClass, unsigned nBits)  : PASN_ConstrainedObject(tag, tagClass),    totalBits(nBits),    bitData((totalBits+7)/8){}PASN_BitString::PASN_BitString(const PASN_BitString & other)  : PASN_ConstrainedObject(other),    bitData(other.bitData, other.bitData.GetSize()){  totalBits = other.totalBits;}PASN_BitString & PASN_BitString::operator=(const PASN_BitString & other){  PASN_ConstrainedObject::operator=(other);  totalBits = other.totalBits;  bitData = PBYTEArray(other.bitData, other.bitData.GetSize());  return *this;}void PASN_BitString::SetData(unsigned nBits, const PBYTEArray & bytes){  if ((PINDEX)nBits >= MaximumStringSize)    return;  bitData = bytes;  SetSize(nBits);}void PASN_BitString::SetData(unsigned nBits, const BYTE * buf, PINDEX size){  if ((PINDEX)nBits >= MaximumStringSize)    return;  if (size == 0)    size = (nBits+7)/8;  memcpy(bitData.GetPointer(size), buf, size);  SetSize(nBits);}BOOL PASN_BitString::SetSize(unsigned nBits){  if (!CheckByteOffset(nBits))    return FALSE;  if (constraint == Unconstrained)    totalBits = nBits;  else if (totalBits < (unsigned)lowerLimit) {    if (lowerLimit < 0)      return FALSE;    totalBits = lowerLimit;  } else if ((unsigned)totalBits > upperLimit) {    if (upperLimit > (unsigned)MaximumSetSize)      return FALSE;    totalBits = upperLimit;  } else    totalBits = nBits;  return bitData.SetSize((totalBits+7)/8);}bool PASN_BitString::operator[](PINDEX bit) const{  if ((unsigned)bit < totalBits)    return (bitData[bit>>3] & (1 << (7 - (bit&7)))) != 0;  return FALSE;}void PASN_BitString::Set(unsigned bit){  if (bit < totalBits)    bitData[(PINDEX)(bit>>3)] |= 1 << (7 - (bit&7));}void PASN_BitString::Clear(unsigned bit){  if (bit < totalBits)    bitData[(PINDEX)(bit>>3)] &= ~(1 << (7 - (bit&7)));}void PASN_BitString::Invert(unsigned bit){  if (bit < totalBits)    bitData[(PINDEX)(bit>>3)] ^= 1 << (7 - (bit&7));}PObject::Comparison PASN_BitString::Compare(const PObject & obj) const{  PAssert(PIsDescendant(&obj, PASN_BitString), PInvalidCast);  const PASN_BitString & other = (const PASN_BitString &)obj;  if (totalBits < other.totalBits)    return LessThan;  if (totalBits > other.totalBits)    return GreaterThan;  return bitData.Compare(other.bitData);}PObject * PASN_BitString::Clone() const{  PAssert(IsClass(PASN_BitString::Class()), PInvalidCast);  return new PASN_BitString(*this);}void PASN_BitString::PrintOn(ostream & strm) const{  int indent = strm.precision() + 2;  _Ios_Fmtflags flags = strm.flags();  if (totalBits > 128)    strm << "Hex {\n"         << hex << setfill('0') << resetiosflags(ios::floatfield) << setiosflags(ios::fixed)         << setw(16) << setprecision(indent) << bitData         << dec << setfill(' ') << resetiosflags(ios::floatfield)         << setw(indent-1) << "}";  else if (totalBits > 32)    strm << "Hex:"         << hex << setfill('0') << resetiosflags(ios::floatfield) << setiosflags(ios::fixed)         << setprecision(2) << setw(16) << bitData         << dec << setfill(' ') << resetiosflags(ios::floatfield);  else {    BYTE mask = 0x80;    PINDEX offset = 0;    for (unsigned i = 0; i < totalBits; i++) {      strm << ((bitData[offset]&mask) != 0 ? '1' : '0');      mask >>= 1;      if (mask == 0) {        mask = 0x80;        offset++;      }    }  }  strm.flags(flags);}void PASN_BitString::SetConstraintBounds(ConstraintType type, int lower, unsigned upper){  if (lower < 0)    return;  PASN_ConstrainedObject::SetConstraintBounds(type, lower, upper);  SetSize(GetSize());}PString PASN_BitString::GetTypeAsString() const{  return "Bit String";}PINDEX PASN_BitString::GetDataLength() const{  return (totalBits+7)/8 + 1;}BOOL PASN_BitString::Decode(PASN_Stream & strm){  return strm.BitStringDecode(*this);}void PASN_BitString::Encode(PASN_Stream & strm) const{  strm.BitStringEncode(*this);}///////////////////////////////////////////////////////////////////////PASN_OctetString::PASN_OctetString(const char * str, PINDEX size)  : PASN_ConstrainedObject(UniversalOctetString, UniversalTagClass){  if (str != NULL) {    if (size == 0)      size = ::strlen(str);    SetValue((const BYTE *)str, size);  }}PASN_OctetString::PASN_OctetString(unsigned tag, TagClass tagClass)  : PASN_ConstrainedObject(tag, tagClass){}PASN_OctetString::PASN_OctetString(const PASN_OctetString & other)  : PASN_ConstrainedObject(other),    value(other.value, other.GetSize()){}PASN_OctetString & PASN_OctetString::operator=(const PASN_OctetString & other){  PASN_ConstrainedObject::operator=(other);  value = PBYTEArray(other.value, other.GetSize());  return *this;}PASN_OctetString & PASN_OctetString::operator=(const char * str){  if (str == NULL)    value.SetSize(lowerLimit);  else    SetValue((const BYTE *)str, strlen(str));  return *this;}PASN_OctetString & PASN_OctetString::operator=(const PString & str){  SetValue((const BYTE *)(const char *)str, str.GetSize()-1);  return *this;}PASN_OctetString & PASN_OctetString::operator=(const PBYTEArray & arr){  PINDEX len = arr.GetSize();  if ((unsigned)len > upperLimit || (int)len < lowerLimit)    SetValue(arr, len);  else    value = arr;  return *this;}void PASN_OctetString::SetValue(const BYTE * data, PINDEX len){  if ((unsigned)len > upperLimit)    len = upperLimit;  if (SetSize((int)len < lowerLimit ? lowerLimit : len))    memcpy(value.GetPointer(), data, len);}PString PASN_OctetString::AsString() const{  if (value.IsEmpty())    return PString();  return PString((const char *)(const BYTE *)value, value.GetSize());}PObject::Comparison PASN_OctetString::Compare(const PObject & obj) const{  PAssert(PIsDescendant(&obj, PASN_OctetString), PInvalidCast);  const PASN_OctetString & other = (const PASN_OctetString &)obj;  return value.Compare(other.value);}PObject * PASN_OctetString::Clone() const{  PAssert(IsClass(PASN_OctetString::Class()), PInvalidCast);  return new PASN_OctetString(*this);}void PASN_OctetString::PrintOn(ostream & strm) const{  int indent = strm.precision() + 2;  _Ios_Fmtflags flags = strm.flags();  strm << ' ' << value.GetSize() << " octets {\n"       << hex << setfill('0') << resetiosflags(ios::floatfield)       << setprecision(indent) << setw(16);  if (value.GetSize() <= 32 || (flags&ios::floatfield) != ios::fixed)    strm << value << '\n';  else {    PBYTEArray truncatedArray(value, 32);    strm << truncatedArray << '\n'         << setfill(' ')         << setw(indent+4) << "...\n";  }  strm << dec << setfill(' ')       << setw(indent-1) << "}";  strm.flags(flags);}void PASN_OctetString::SetConstraintBounds(ConstraintType type, int lower, unsigned upper){  if (lower < 0)    return;  PASN_ConstrainedObject::SetConstraintBounds(type, lower, upper);  SetSize(GetSize());}PString PASN_OctetString::GetTypeAsString() const{  return "Octet String";}PINDEX PASN_OctetString::GetDataLength() const{  return value.GetSize();}BOOL PASN_OctetString::SetSize(PINDEX newSize){  if (!CheckByteOffset(newSize, MaximumStringSize))    return FALSE;  if (constraint != Unconstrained) {    if (newSize < (PINDEX)lowerLimit) {      if (lowerLimit < 0)        return FALSE;      newSize = lowerLimit;    } else if ((unsigned)newSize > upperLimit) {      if (upperLimit > (unsigned)MaximumStringSize)        return FALSE;      newSize = upperLimit;    }  }  return value.SetSize(newSize);}BOOL PASN_OctetString::Decode(PASN_Stream & strm){  return strm.OctetStringDecode(*this);}void PASN_OctetString::Encode(PASN_Stream & strm) const{  strm.OctetStringEncode(*this);}///////////////////////////////////////////////////////////////////////PASN_ConstrainedString::PASN_ConstrainedString(const char * canonical, PINDEX size,                                               unsigned tag, TagClass tagClass)  : PASN_ConstrainedObject(tag, tagClass){  canonicalSet = canonical;  canonicalSetSize = size;  canonicalSetBits = CountBits(size);  SetCharacterSet(canonicalSet, canonicalSetSize, Unconstrained);}PASN_ConstrainedString & PASN_ConstrainedString::operator=(const char * str){  if (str == NULL)    str = "";  PStringStream newValue;  PINDEX len = strlen(str);  // Can't copy any more characters than the upper constraint  if ((unsigned)len > upperLimit)    len = upperLimit;  // Now copy individual characters, if they are in character set constraint  for (PINDEX i = 0; i < len; i++) {    PINDEX sz = characterSet.GetSize();    if (sz == 0 || memchr(characterSet, str[i], sz) != NULL)      newValue << str[i];  }  // Make sure string meets minimum length constraint  while ((int)len < lowerLimit) {    newValue << characterSet[0];    len++;  }  value = newValue;  value.MakeMinimumSize();  return *this;}void PASN_ConstrainedString::SetCharacterSet(ConstraintType ctype, const char * set){  SetCharacterSet(set, strlen(set), ctype);}void PASN_ConstrainedString::SetCharacterSet(ConstraintType ctype, unsigned firstChar, unsigned lastChar){  char buffer[256];  for (unsigned i = firstChar; i < lastChar; i++)    buffer[i] = (char)i;  SetCharacterSet(buffer, lastChar - firstChar + 1, ctype);}void PASN_ConstrainedString::SetCharacterSet(const char * set, PINDEX setSize, ConstraintType ctype){  if (ctype == Unconstrained) {    characterSet.SetSize(canonicalSetSize);    memcpy(characterSet.GetPointer(), canonicalSet, canonicalSetSize);  }  else if (setSize >= MaximumSetSize ||           canonicalSetSize >= MaximumSetSize ||           characterSet.GetSize() >= MaximumSetSize)    return;  else {    characterSet.SetSize(setSize);    PINDEX count = 0;    for (PINDEX i = 0; i < canonicalSetSize; i++) {      if (memchr(set, canonicalSet[i], setSize) != NULL)        characterSet[count++] = canonicalSet[i];    }    if (count < 0)      return;    characterSet.SetSize(count);  }  charSetUnalignedBits = CountBits(characterSet.GetSize());  charSetAlignedBits = 1;  while (charSetUnalignedBits > charSetAlignedBits)    charSetAlignedBits <<= 1;  operator=((const char *)value);}PObject::Comparison PASN_ConstrainedString::Compare(const PObject & obj) const{  PAssert(PIsDescendant(&obj, PASN_ConstrainedString), PInvalidCast);  const PASN_ConstrainedString & other = (const PASN_ConstrainedString &)obj;  return value.Compare(other.value);}void PASN_ConstrainedString::PrintOn(ostream & strm) const{  strm << value.ToLiteral();}void PASN_ConstrainedString::SetConstraintBounds(ConstraintType type,                                                 int lower, unsigned upper){  if (lower < 0)    return;  PASN_ConstrainedObject::SetConstraintBounds(type, lower, upper);  if (constraint != Unconstrained) {    if (value.GetSize() < (PINDEX)lowerLimit)      value.SetSize(lowerLimit);    else if ((unsigned)value.GetSize() > upperLimit)      value.SetSize(upperLimit);  }}PINDEX PASN_ConstrainedString::GetDataLength() const{  return value.GetSize()-1;}BOOL PASN_ConstrainedString::Decode(PASN_Stream & strm){  return strm.ConstrainedStringDecode(*this);}void PASN_ConstrainedString::Encode(PASN_Stream & strm) const{  strm.ConstrainedStringEncode(*this);}#define DEFINE_STRING_CLASS(name, set) \  static const char name##StringSet[] = set; \  PASN_##name##String::PASN_##name##String(const char * str) \    : PASN_ConstrainedString(name##StringSet, sizeof(name##StringSet)-1, \                             Universal##name##String, UniversalTagClass) \    { PASN_ConstrainedString::SetValue(str); } \  PASN_##name##String::PASN_##name##String(unsigned tag, TagClass tagClass) \    : PASN_ConstrainedString(name##StringSet, sizeof(name##StringSet)-1, tag, tagClass) \    { } \  PASN_##name##String & PASN_##name##String::operator=(const char * str) \    { PASN_ConstrainedString::SetValue(str); return *this; } \  PASN_##name##String & PASN_##name##String::operator=(const PString & str) \    { PASN_ConstrainedString::SetValue(str); return *this; } \  PObject * PASN_##name##String::Clone() const \    { PAssert(IsClass(PASN_##name##String::Class()), PInvalidCast); \      return new PASN_##name##String(*this); } \  PString PASN_##name##String::GetTypeAsString() const \    { return #name " String"; }DEFINE_STRING_CLASS(Numeric,   " 0123456789")DEFINE_STRING_CLASS(Printable, " '()+,-./0123456789:=?"                               "ABCDEFGHIJKLMNOPQRSTUVWXYZ"                               "abcdefghijklmnopqrstuvwxyz")DEFINE_STRING_CLASS(Visible,   " !\"#$%&'()*+,-./0123456789:;<=>?"                               "@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_"                               "`abcdefghijklmnopqrstuvwxyz{|}~")DEFINE_STRING_CLASS(IA5,       "\000\001\002\003\004\005\006\007"

⌨️ 快捷键说明

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