📄 main.cxx
字号:
DefinedType::DefinedType(PString * name, BOOL parameter) : TypeBase(Tag::IllegalUniversalTag), referenceName(*name){ delete name; baseType = NULL; unresolved = !parameter;}DefinedType::DefinedType(TypeBase * refType, TypeBase * bType) : TypeBase(refType), referenceName(bType->GetName()){ MoveConstraints(refType); baseType = bType; unresolved = FALSE;}DefinedType::DefinedType(TypeBase * refType, const PString & refName) : TypeBase(refType){ MoveConstraints(refType); ConstructFromType(refType, refName);}DefinedType::DefinedType(TypeBase * refType, const TypeBase & parent) : TypeBase(refType){ if (!name) ConstructFromType(refType, parent.GetName() + '_' + name); else ConstructFromType(refType, parent.GetName() + "_subtype");}void DefinedType::ConstructFromType(TypeBase * refType, const PString & name){ referenceName = name; refType->SetName(new PString(name)); Module->AppendType(refType); baseType = refType; unresolved = FALSE;}void DefinedType::PrintOn(ostream & strm) const{ PrintStart(strm); strm << referenceName << ' '; PrintFinish(strm);}BOOL DefinedType::CanReferenceType() const{ return TRUE;}BOOL DefinedType::IsChoice() const{ if (baseType != NULL) return baseType->IsChoice(); return FALSE;}BOOL DefinedType::IsParameterizedType() const{ if (baseType != NULL) return baseType->IsParameterizedType(); return FALSE;}BOOL DefinedType::ReferencesType(const TypeBase & type){ if (unresolved) { unresolved = FALSE; if ((baseType = Module->FindType(referenceName)) == NULL) PError << StdError(Warning) << "unresolved symbol: " << referenceName << endl; else { if (!HasNonStandardTag()) defaultTag = tag = baseType->GetTag(); } } return type.GetName() == referenceName;}void DefinedType::GenerateOperators(ostream & hdr, ostream & cxx, const TypeBase & actualType){ if (baseType != NULL) baseType->GenerateOperators(hdr, cxx, actualType);}const char * DefinedType::GetAncestorClass() const{ if (baseType != NULL) return baseType->GetAncestorClass(); return NULL;}PString DefinedType::GetTypeName() const{ if (baseType == NULL) return referenceName; if (HasConstraints() && baseType->IsPrimitiveType()) return baseType->GetTypeName(); return baseType->GetIdentifier();}/////////////////////////////////////////////////////////ParameterizedType::ParameterizedType(PString * name, TypesList * args) : DefinedType(name, FALSE), arguments(*args){ delete args;}void ParameterizedType::PrintOn(ostream & strm) const{ PrintStart(strm); strm << referenceName << " { "; for (PINDEX i = 0; i < arguments.GetSize(); i++) { if (i > 0) strm << ", "; strm << arguments[i].GetTypeName(); } strm << " }"; PrintFinish(strm);}BOOL ParameterizedType::IsParameterizedType() const{ return TRUE;}BOOL ParameterizedType::ReferencesType(const TypeBase & type){ for (PINDEX i = 0; i < arguments.GetSize(); i++) { if (arguments[i].ReferencesType(type)) return TRUE; } return DefinedType::ReferencesType(type);}PString ParameterizedType::GetTypeName() const{ PString typeName = DefinedType::GetTypeName(); if (!arguments.IsEmpty()) { typeName += '<'; for (PINDEX i = 0; i < arguments.GetSize(); i++) { if (i > 0) typeName += ", "; typeName += arguments[i].GetTypeName(); } typeName += '>'; } return typeName;}/////////////////////////////////////////////////////////SelectionType::SelectionType(PString * name, TypeBase * base) : TypeBase(Tag::IllegalUniversalTag), selection(*name){ delete name; baseType = PAssertNULL(base);}SelectionType::~SelectionType(){ delete baseType;}void SelectionType::PrintOn(ostream & strm) const{ PrintStart(strm); strm << selection << '<' << *baseType; PrintFinish(strm);}void SelectionType::FlattenUsedTypes(){ baseType = baseType->FlattenThisType(*this);}TypeBase * SelectionType::FlattenThisType(const TypeBase & parent){ return new DefinedType(this, parent);}void SelectionType::GenerateCplusplus(ostream &, ostream &){ PError << StdError(Fatal) << "Cannot generate code for Selection type" << endl; isGenerated = TRUE;}const char * SelectionType::GetAncestorClass() const{ return "";}BOOL SelectionType::CanReferenceType() const{ return TRUE;}BOOL SelectionType::ReferencesType(const TypeBase & type){ return baseType->ReferencesType(type);}/////////////////////////////////////////////////////////BooleanType::BooleanType() : TypeBase(Tag::UniversalBoolean){}void BooleanType::GenerateOperators(ostream & hdr, ostream & cxx, const TypeBase & actualType){ hdr << " " << actualType.GetIdentifier() << " & operator=(BOOL v)"; if (Module->UsingInlines()) hdr << " { SetValue(v); return *this; }\n"; else { hdr << ";\n"; cxx << actualType.GetTemplatePrefix() << actualType.GetIdentifier() << " & " << actualType.GetClassNameString() << "::operator=(BOOL v)\n" "{\n" " SetValue(v);\n" " return *this;\n" "}\n" "\n" "\n"; }}const char * BooleanType::GetAncestorClass() const{ return "PASN_Boolean";}/////////////////////////////////////////////////////////IntegerType::IntegerType() : TypeBase(Tag::UniversalInteger){}IntegerType::IntegerType(NamedNumberList * lst) : TypeBase(Tag::UniversalInteger), allowedValues(*lst){ delete lst;}void IntegerType::GenerateOperators(ostream & hdr, ostream & cxx, const TypeBase & actualType){ hdr << " " << actualType.GetIdentifier() << " & operator=(int v)"; if (Module->UsingInlines()) hdr << " { SetValue(v); return *this; }\n"; else { hdr << ";\n"; cxx << actualType.GetTemplatePrefix() << actualType.GetIdentifier() << " & " << actualType.GetClassNameString() << "::operator=(int v)\n" "{\n" " SetValue(v);\n" " return *this;\n" "}\n" "\n" "\n"; } hdr << " " << actualType.GetIdentifier() << " & operator=(unsigned v)"; if (Module->UsingInlines()) hdr << " { SetValue(v); return *this; }\n"; else { hdr << ";\n"; cxx << actualType.GetTemplatePrefix() << actualType.GetIdentifier() << " & " << actualType.GetClassNameString() << "::operator=(unsigned v)\n" "{\n" " SetValue(v);\n" " return *this;\n" "}\n" "\n" "\n"; }}const char * IntegerType::GetAncestorClass() const{ return "PASN_Integer";}/////////////////////////////////////////////////////////EnumeratedType::EnumeratedType(NamedNumberList * enums, BOOL extend, NamedNumberList * ext) : TypeBase(Tag::UniversalEnumeration), enumerations(*enums){ numEnums = enums->GetSize(); delete enums; extendable = extend; if (ext != NULL) { ext->DisallowDeleteObjects(); for (PINDEX i = 0; i < ext->GetSize(); i++) enumerations.Append(ext->GetAt(i)); delete ext; }}void EnumeratedType::PrintOn(ostream & strm) const{ PrintStart(strm); strm << '\n'; PINDEX i; for (i = 0; i < numEnums; i++) strm << indent() << enumerations[i] << '\n'; if (extendable) { strm << "...\n"; for (; i < enumerations.GetSize(); i++) strm << indent() << enumerations[i] << '\n'; } PrintFinish(strm);}TypeBase * EnumeratedType::FlattenThisType(const TypeBase & parent){ return new DefinedType(this, parent);}void EnumeratedType::GenerateCplusplus(ostream & hdr, ostream & cxx){ PINDEX i; BeginGenerateCplusplus(hdr, cxx); int maxEnumValue = 0; for (i = 0; i < enumerations.GetSize(); i++) { int num = enumerations[i].GetNumber(); if (maxEnumValue < num) maxEnumValue = num; } // Generate enumerations and complete the constructor implementation hdr << " enum Enumerations {\n"; cxx << ", " << maxEnumValue << ", " << (extendable ? "TRUE" : "FALSE") << "\n" "#ifndef PASN_NOPRINTON\n" " , \""; int prevNum = -1; for (i = 0; i < enumerations.GetSize(); i++) { if (i > 0) { hdr << ",\n"; cxx << " \""; } hdr << " e_" << MakeIdentifierC(enumerations[i].GetName()); cxx << enumerations[i].GetName(); int num = enumerations[i].GetNumber(); if (num != prevNum+1) { hdr << " = " << num; cxx << '=' << num; } prevNum = num; cxx << " \"\n"; } hdr << "\n" " };\n" "\n"; cxx << "#endif\n" " )\n" "{\n"; GenerateCplusplusConstraints(PString(), hdr, cxx); EndGenerateCplusplus(hdr, cxx);}void EnumeratedType::GenerateOperators(ostream & hdr, ostream & cxx, const TypeBase & actualType){ hdr << " " << actualType.GetIdentifier() << " & operator=(unsigned v)"; if (Module->UsingInlines()) hdr << " { SetValue(v); return *this; }\n"; else { hdr << ";\n"; cxx << actualType.GetTemplatePrefix() << actualType.GetIdentifier() << " & " << actualType.GetClassNameString() << "::operator=(unsigned v)\n" "{\n" " SetValue(v);\n" " return *this;\n" "}\n" "\n" "\n"; }}const char * EnumeratedType::GetAncestorClass() const{ return "PASN_Enumeration";}/////////////////////////////////////////////////////////RealType::RealType() : TypeBase(Tag::UniversalReal){}const char * RealType::GetAncestorClass() const{ return "PASN_Real";}/////////////////////////////////////////////////////////BitStringType::BitStringType() : TypeBase(Tag::UniversalBitString){}BitStringType::BitStringType(NamedNumberList * lst) : TypeBase(Tag::UniversalBitString), allowedBits(*lst){ delete lst;}int BitStringType::GetIdentifierTokenContext() const{ return OID_IDENTIFIER;}int BitStringType::GetBraceTokenContext() const{ return BITSTRING_BRACE;}const char * BitStringType::GetAncestorClass() const{ return "PASN_BitString";}/////////////////////////////////////////////////////////OctetStringType::OctetStringType() : TypeBase(Tag::UniversalOctetString){}void OctetStringType::GenerateOperators(ostream & hdr, ostream & cxx, const TypeBase & actualType){ hdr << " " << actualType.GetIdentifier() << " & operator=(const char * v)"; if (Module->UsingInlines()) hdr << " { SetValue(v); return *this; }\n"; else { hdr << ";\n"; cxx << actualType.GetTemplatePrefix() << actualType.GetIdentifier() << " & " << actualType.GetClassNameString() << "::operator=(const char * v)\n" "{\n" " SetValue(v);\n" " return *this;\n" "}\n" "\n" "\n"; } hdr << " " << actualType.GetIdentifier() << " & operator=(const PString & v)"; if (Module->UsingInlines()) hdr << " { SetValue(v); return *this; }\n"; else { hdr << ";\n"; cxx << actualType.GetTemplatePrefix() << actualType.GetIdentifier() << " & " << actualType.GetClassNameString() << "::operator=(const PString & v)\n" "{\n" " SetValue(v);\n" " return *this;\n" "}\n" "\n" "\n"; } hdr << " " << actualType.GetIdentifier() << " & operator=(const PBYTEArray & v)"; if (Module->UsingInlines()) hdr << " { SetValue(v); return *this; }\n"; else { hdr << ";\n"; cxx << actualType.GetTemplatePrefix() << actualType.GetIdentifier() << " & " << actualType.GetClassNameString() << "::operator=(const PBYTEArray & v)\n" "{\n" " SetValue(v);\n" " return *this;\n" "}\n" "\n" "\n"; }}const char * OctetStringType::GetAncestorClass() const{ return "PASN_OctetString";}/////////////////////////////////////////////////////////NullType::NullType() : TypeBase(Tag::UniversalNull){}const char * NullType::GetAncestorClass() const{ return "PASN_Null";}/////////////////////////////////////////////////////////SequenceType::SequenceType(TypesList * stnd, BOOL extend, TypesList * ext, unsigned tagNum) : TypeBase(tagNum){ if (stnd != NULL) { numFields = stnd->GetSize(); fields = *stnd; delete stnd;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -