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

📄 main.cxx

📁 pwlib源码库
💻 CXX
📖 第 1 页 / 共 5 页
字号:
PObject::Comparison TypeBase::Compare(const PObject & obj) const{  return name.Compare(((const TypeBase &)obj).name);}void TypeBase::PrintOn(ostream & strm) const{  PrintStart(strm);  PrintFinish(strm);}void TypeBase::PrintStart(ostream & strm) const{  strm << indent();  if (!name) {    strm << name;    if (!parameters.IsEmpty()) {      strm << " { ";      for (PINDEX i = 0; i < parameters.GetSize(); i++) {        if (i > 0)          strm << ", ";        strm << parameters[i];      }      strm << " } ";    }    strm << ": ";  }  strm << tag << GetClass() << ' ';  Module->SetIndentLevel(1);}void TypeBase::PrintFinish(ostream & strm) const{  Module->SetIndentLevel(-1);  strm << ' ' << constraints;  if (isOptional)    strm << " OPTIONAL";  if (defaultValue != NULL)    strm << " DEFAULT " << *defaultValue;  strm << '\n';}int TypeBase::GetIdentifierTokenContext() const{  return IDENTIFIER;}int TypeBase::GetBraceTokenContext() const{  return '{';}void TypeBase::SetName(PString * newName){  name = *newName;  delete newName;  identifier = MakeIdentifierC(name);}void TypeBase::AdjustIdentifier(){  identifier = Module->GetPrefix() + MakeIdentifierC(name);}void TypeBase::SetTag(Tag::Type type, unsigned num, Tag::Mode mode){  tag.type = type;  tag.number = num;  tag.mode = mode;}void TypeBase::SetParameters(PStringList * list){  parameters = *list;  delete list;}void TypeBase::MoveConstraints(TypeBase * from){  from->constraints.DisallowDeleteObjects();  while (!from->constraints.IsEmpty())    constraints.Append(from->constraints.RemoveAt(0));  from->constraints.AllowDeleteObjects();}void TypeBase::FlattenUsedTypes(){}TypeBase * TypeBase::FlattenThisType(const TypeBase &){  return this;}BOOL TypeBase::IsChoice() const{  return FALSE;}BOOL TypeBase::IsParameterizedType() const{  return FALSE;}BOOL TypeBase::IsPrimitiveType() const{  return TRUE;}void TypeBase::GenerateCplusplus(ostream & hdr, ostream & cxx){  BeginGenerateCplusplus(hdr, cxx);  // Close off the constructor implementation  cxx << ")\n"         "{\n";  GenerateCplusplusConstraints(PString(), hdr, cxx);  EndGenerateCplusplus(hdr, cxx);}void TypeBase::GenerateForwardDecls(ostream &){}void TypeBase::GenerateOperators(ostream &, ostream &, const TypeBase &){}PString TypeBase::GetTypeName() const{  return GetAncestorClass();}BOOL TypeBase::CanReferenceType() const{  return FALSE;}BOOL TypeBase::ReferencesType(const TypeBase &){  return FALSE;}void TypeBase::SetImportPrefix(const PString &){}BOOL TypeBase::IsParameterisedImport() const{  return FALSE;}void TypeBase::BeginGenerateCplusplus(ostream & hdr, ostream & cxx){  classNameString = GetIdentifier();  if (!parameters.IsEmpty()) {    templatePrefix = "template <";    classNameString += '<';    for (PINDEX i = 0; i < parameters.GetSize(); i++) {      if (i > 0) {        templatePrefix += ", ";        classNameString += ", ";      }      PString ident = MakeIdentifierC(parameters[i]);      templatePrefix += "class " + ident;      classNameString += ident;    }    templatePrefix += ">\n";    classNameString += '>';  }  // Output header file declaration of class  hdr << "//\n"         "// " << GetName() << "\n"         "//\n"         "\n";  GenerateForwardDecls(hdr);  hdr << templatePrefix      << "class " << GetIdentifier() << " : public " << GetTypeName() << "\n"         "{\n"         "#ifndef PASN_LEANANDMEAN\n"         "    PCLASSINFO(" << GetIdentifier() << ", " << GetTypeName() << ");\n"         "#endif\n"         "  public:\n"         "    " << GetIdentifier() << "(unsigned tag = ";  if (tag.type == Tag::Universal &&      tag.number < PARRAYSIZE(UniversalTagNames) &&      UniversalTagNames[tag.number] != NULL)    hdr << UniversalTagNames[tag.number];  else    hdr << tag.number;  hdr << ", TagClass tagClass = " << UniversalTagClassNames[tag.type] << ");\n\n";  App & app = (App &)PProcess::Current();  app.OutputAdditionalHeaders(hdr, GetIdentifier());  // Output cxx file implementation of class  cxx << "//\n"         "// " << GetName() << "\n"         "//\n"         "\n"      << GetTemplatePrefix()      << GetClassNameString() << "::" << GetIdentifier() << "(unsigned tag, PASN_Object::TagClass tagClass)\n"         "  : " << GetTypeName() << "(tag, tagClass";}void TypeBase::EndGenerateCplusplus(ostream & hdr, ostream & cxx){  cxx << "}\n"         "\n"         "\n";  GenerateOperators(hdr, cxx, *this);  // Output header file declaration of class  hdr << "    PObject * Clone() const;\n"         "};\n"         "\n"         "\n";  // Output cxx file implementation of class  cxx << GetTemplatePrefix()      << "PObject * " << GetClassNameString() << "::Clone() const\n"         "{\n"         "#ifndef PASN_LEANANDMEAN\n"         "  PAssert(IsClass(" << GetClassNameString() << "::Class()), PInvalidCast);\n"         "#endif\n"         "  return new " << GetClassNameString() << "(*this);\n"         "}\n"         "\n"         "\n";  isGenerated = TRUE;}void TypeBase::GenerateCplusplusConstructor(ostream &, ostream & cxx){  cxx << '(';  if (HasNonStandardTag()) {    if (tag.type == Tag::Universal &&        tag.number < PARRAYSIZE(UniversalTagNames) &&        UniversalTagNames[tag.number] != NULL)      cxx << UniversalTagNames[tag.number];    else      cxx << tag.number;    cxx << ", " << UniversalTagClassNames[tag.type];  }  cxx << ')';}void TypeBase::GenerateCplusplusConstraints(const PString & prefix, ostream & hdr, ostream & cxx){  for (PINDEX i = 0; i < constraints.GetSize(); i++)    constraints[i].GenerateCplusplus("  " + prefix + "SetConstraints(", hdr, 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)

⌨️ 快捷键说明

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