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

📄 main.cxx

📁 asn格式文件的编译器
💻 CXX
📖 第 1 页 / 共 5 页
字号:
}bool ElementListConstraintElement::HasPERInvisibleConstraint(const Parameter& param) const{	ConstraintElementVector::const_iterator it = elements.begin(),		last = elements.end();	for (; it != last; ++it)		if ((*it)->HasPERInvisibleConstraint(param))			return true;		return false;}void ElementListConstraintElement::GenerateObjectSetInstanceCode(const std::string& prefix, std::ostream& cxx) const{	ConstraintElementVector::const_iterator i = elements.begin(), e = elements.end();	for (; i != e; ++i)		(*i)->GenerateObjectSetInstanceCode(prefix, cxx);}void ElementListConstraintElement::GenerateObjSetAccessCode(std::ostream& cxx){	ConstraintElementVector::const_iterator i = elements.begin(), e = elements.end();	for (; i != e; ++i)		(*i)->GenerateObjSetAccessCode(cxx);}const SizeConstraintElement* ElementListConstraintElement::GetSizeConstraint() const{    const SizeConstraintElement* result=NULL;	ConstraintElementVector::const_iterator it = elements.begin(),		last = elements.end();	for (; it != last; ++it)		if ((result = (*it)->GetSizeConstraint()) != NULL)			break;	return result;}const FromConstraintElement* ElementListConstraintElement::GetFromConstraint() const{    const FromConstraintElement* result=NULL;	ConstraintElementVector::const_iterator it = elements.begin(),		last = elements.end();	for (; it != last; ++it)		if ((result = (*it)->GetFromConstraint()) != NULL)			break;	return result;}/////////////////////////////////////////////////////////SingleValueConstraintElement::SingleValueConstraintElement(const ValuePtr& val): value(val){}SingleValueConstraintElement::~SingleValueConstraintElement(){}void SingleValueConstraintElement::PrintOn(std::ostream & strm) const{  strm << *value;}void SingleValueConstraintElement::GenerateCplusplus(const std::string & fn, std::ostream & hdr, std::ostream & cxx, std::ostream & inl) const{  if (dynamic_cast<const IntegerValue*>(value.get())) {    cxx << fn << ", ";    value->GenerateCplusplus(hdr, cxx, inl);    cxx << ", ";    value->GenerateCplusplus(hdr, cxx, inl);    cxx << ");\n";    return;  }  if (dynamic_cast<const CharacterStringValue*>(value.get())) {    cxx << fn << ", ";    value->GenerateCplusplus(hdr, cxx, inl);    cxx << ");\n";    return;  }  std::cerr << StdError(Warning) << "Unsupported constraint type, ignoring." << std::endl;}void SingleValueConstraintElement::GetConstraint(std::string& str) const{	std::strstream strm;  if (dynamic_cast<const IntegerValue*>(value.get())) {	  strm << *value << ", " << *value << std::ends;	  str += strm.str();    return;  }  if (dynamic_cast<const CharacterStringValue*>(value.get())) {	  strm << *value << std::ends;	  str += strm.str();    return;  }}bool SingleValueConstraintElement::HasPERInvisibleConstraint(const Parameter& ) const{    return false;}bool SingleValueConstraintElement::GetCharacterSet(std::string& characterSet) const{	const CharacterStringValue* val;	if ((val = dynamic_cast<const CharacterStringValue*>(value.get())) != NULL) 	{		val->GetValue(characterSet);		return true;	}	return false;}/////////////////////////////////////////////////////////ValueRangeConstraintElement::ValueRangeConstraintElement(ValuePtr lowerBound, ValuePtr upperBound){  lower = lowerBound;  upper = upperBound;}ValueRangeConstraintElement::~ValueRangeConstraintElement(){}void ValueRangeConstraintElement::PrintOn(std::ostream & strm) const{  strm << *lower << ".." << *upper;}void ValueRangeConstraintElement::GenerateCplusplus(const std::string & fn, std::ostream & hdr, std::ostream & cxx, std::ostream & inl) const{  cxx << fn << ", ";  lower->GenerateCplusplus(hdr, cxx, inl);  cxx << ", ";  upper->GenerateCplusplus(hdr, cxx, inl);  cxx << ");\n";}void ValueRangeConstraintElement::GetConstraint(std::string& str) const{	if (dynamic_cast<MinValue*>(lower.get()))	{		str_replace(str, "FixedConstraint", "Unconstrained");	}	else if (dynamic_cast<MaxValue*>(upper.get()))	{		str_replace(str,"FixedConstraint", "PartiallyConstrained");	}	else if (dynamic_cast<CharacterStringValue*>(lower.get()))	{		str_replace(str,"FromConstraint", "FromRangeConstraint");	}	std::strstream strm;	strm << *lower << ", " << *upper << std::ends;	str += strm.str();}bool ValueRangeConstraintElement::HasPERInvisibleConstraint(const Parameter& ) const{    return false;}bool ValueRangeConstraintElement::GetCharacterSet(std::string& characterSet) const{	const CharacterValue* l = dynamic_cast<const CharacterValue*>(lower.get());	const CharacterValue* u = dynamic_cast<const CharacterValue*>(upper.get());    if ( l && u)    {        for (char c = (char) l->GetValue();             c <= (char) u->GetValue();             ++c)        {            characterSet += c;        }        return true;    }	const CharacterStringValue* lv = dynamic_cast<const CharacterStringValue*>(lower.get());	const CharacterStringValue* uv = dynamic_cast<const CharacterStringValue*>(upper.get());    if (lv && uv)    {        std::string l, u;        lv->GetValue(l);        uv->GetValue(u);        if (l.length()==1 && u.length() == 1)        {            for (char c = l[0]; c <= u[0]; ++c)                characterSet += c;            return true;        }    }    return false;}/////////////////////////////////////////////////////////SubTypeConstraintElement::SubTypeConstraintElement(TypePtr typ): subtype(typ){}SubTypeConstraintElement::~SubTypeConstraintElement(){}void SubTypeConstraintElement::PrintOn(std::ostream & strm) const{	strm << *subtype;}void SubTypeConstraintElement::GenerateCplusplus(const std::string & str, std::ostream & , std::ostream & cxx, std::ostream& ) const{    cxx << "    " << subtype->GetTypeName() << " typeConstraint;\n"         << "    setConstraints(" ;    if (str.find("ASN1::ExtendableConstraint") != -1)        cxx << "ASN1::ExtendableConstraint,";    else        cxx << "ASN1::FixedConstraint,";    cxx << " typeConstraint.getLowerLimit(), typeConstraint.getUpperLimit());\n";}void SubTypeConstraintElement::GetConstraint(std::string& str) const{    std::strstream strm;    strm << str << subtype->GetTypeName() << "::LowerLimit, " 		<< subtype->GetTypeName() << "::UpperLimit" << std::ends;    str = strm.str();}bool SubTypeConstraintElement::ReferencesType(const TypeBase & type) const{  return subtype->ReferencesType(type);}bool SubTypeConstraintElement::HasPERInvisibleConstraint(const Parameter& ) const{    return false;}const SubTypeConstraintElement* SubTypeConstraintElement::GetSubTypeConstraint() const{    return this;}std::string SubTypeConstraintElement::GetSubTypeName() const{    return subtype->GetTypeName();}/////////////////////////////////////////////////////////NestedConstraintConstraintElement::NestedConstraintConstraintElement(ConstraintPtr con){  constraint = con;}NestedConstraintConstraintElement::~NestedConstraintConstraintElement(){}bool NestedConstraintConstraintElement::ReferencesType(const TypeBase & type) const{  if (constraint.get() == NULL)    return false;  return constraint->ReferencesType(type);}bool NestedConstraintConstraintElement::HasPERInvisibleConstraint(const Parameter& param) const{	return constraint->HasPERInvisibleConstraint(param);}///////////////////////////////////////////////////////SizeConstraintElement::SizeConstraintElement(ConstraintPtr constraint)  : NestedConstraintConstraintElement(constraint){}void SizeConstraintElement::PrintOn(std::ostream & strm) const{  strm << "SIZE" << *constraint;}void SizeConstraintElement::GenerateCplusplus(const std::string & fn, std::ostream & hdr, std::ostream & cxx, std::ostream & inl) const{  constraint->GenerateCplusplus(fn, hdr, cxx, inl);}void SizeConstraintElement::GetConstraint(std::string& str) const{	const char* cstr = "ASN1::FixedConstraint, ";	const int len = strlen(cstr);	std::string::iterator itr = std::find_end(str.begin(), str.end(), cstr, cstr+len);	if (itr != str.end())		str.replace(itr, itr+len, " ASN1::SizeConstraint<");	constraint->GetConstraint(str);	str += "> ";}const SizeConstraintElement* SizeConstraintElement::GetSizeConstraint() const{	return this;}/////////////////////////////////////////////////////////FromConstraintElement::FromConstraintElement(ConstraintPtr constraint)  : NestedConstraintConstraintElement(constraint){}void FromConstraintElement::PrintOn(std::ostream & strm) const{  strm << "FROM" << *constraint;}void FromConstraintElement::GenerateCplusplus(const std::string & fn, std::ostream & hdr, std::ostream & cxx, std::ostream & inl) const{  std::string newfn = fn;  str_replace(newfn,"setConstraints(", "setCharacterSet(");  constraint->GenerateCplusplus(newfn, hdr, cxx, inl);}void FromConstraintElement::GetConstraint(std::string& ) const{}const FromConstraintElement* FromConstraintElement::GetFromConstraint() const{	return this;}std::string FromConstraintElement::GetCharacterSet(const char* canonicalSet, int canonicalSetSize) const{    std::string characterSet;    if (!constraint->IsExtendable())    {        std::string constrainedSet;        constraint->GetCharacterSet(constrainedSet);                int setSize = constrainedSet.size();        const char* c = &constrainedSet[0];        for (int i = 0; i < canonicalSetSize; i++) {            if (memchr(c, canonicalSet[i], setSize) != NULL)                characterSet += canonicalSet[i];        }    }    return characterSet;}int FromConstraintElement::GetRange(std::ostream& cxx) const{	std::strstream inl, hdr, tmpcxx;    std::string str;    constraint->GenerateCplusplus(str,hdr, tmpcxx, inl);	int min, max;	char c;	tmpcxx >> str >> min >> c >> max;    cxx << min << ", " << max;    return max-min;}/////////////////////////////////////////////////////////WithComponentConstraintElement::WithComponentConstraintElement(std::string newName,                                                               ConstraintPtr constraint,                                                               int pres)  : NestedConstraintConstraintElement(constraint){  name = newName;  presence = pres;}void WithComponentConstraintElement::PrintOn(std::ostream & strm) const{  if (name.empty())    strm << "WITH COMPONENT";  else    strm << name;  if (constraint.get() != NULL)    strm << *constraint;  switch (presence) {    case Present :      strm << " PRESENT";      break;    case Absent :      strm << " ABSENT";      break;    case Optional :      strm << " OPTIONAL";      break;  }}void WithComponentConstraintElement::GenerateCplusplus(const std::string &, std::ostream &, std::ostream & , std::ostream &) const{}/////////////////////////////////////////////////////////InnerTypeConstraintElement::InnerTypeConstraintElement(std::auto_ptr<ConstraintElementVector> list,                                                       bool part)  : ElementListConstraintElement(list){  partial = part;}void InnerTypeConstraintElement::PrintOn(std::ostream & strm) const{  strm << "WITH COMPONENTS { ";  if (partial)    strm << "..., ";  for (ConstraintElementVector::size_type i = 0; i < elements.size(); i++) {    if (i > 0)      strm << ", ";    elements[i]->PrintOn(strm);  }  strm << " }";}void InnerTypeConstraintElement::GenerateCplusplus(const std::string & fn, std::ostream & hdr, std::ostream & cxx, std::ostream & inl) const{  for (ConstraintElementVector::size_type i = 0; i < elements.size(); i++)    elements[i]->GenerateCplusplus(fn, hdr, cxx, inl);}/////////////////////////////////////////////////////////UserDefinedConstraintElement::UserDefinedConstraintElement(ActualParameterListPtr list): parameters(list){}void UserDefinedConstraintElement::PrintOn(std::ostream & strm) const{  strm << "CONSTRAINED BY { ";  for (size_t i = 0; i < parameters->size(); i++) {    if (i > 0)      strm << ", ";    strm << * (*parameters)[i];  }  strm << " }";}void UserDefinedConstraintElement::GenerateCplusplus(const std::string &, std::ostream &, std::ostream &, std::ostream &) const{}////////////////////////////////////////////////////////////TableConstraint::TableConstraint(boost::shared_ptr<DefinedObjectSet> os, 								std::auto_ptr<StringList> as): objSet(os), atNotations(as){}TableConstraint::~TableConstraint(){}std::string TableConstraint::GetObjectSetIdentifier() const {     return MakeIdentifierC(objSet->GetName()); } bool TableConstraint::ReferenceType(const TypeBase& type){	return type.GetTypeName() == GetObjectSetIdentifier();}/////////////////////////////////////////////////////////TypeBase::TypeBase(unsigned tagNum, ModuleDefinition* md)  : tag(tagNum, md->GetDefaultTagMode()), defaultTag(tagNum, md->GetDefaultTagMode()){  isOptional = false;  isGenerated = false;  isValueSetType = false;  module = md;}TypeBase::TypeBase(TypeBase& copy)  : name(copy.name),    identifier(MakeIdentifierC(copy.name)),    tag(copy.tag),    defaultTag(copy.tag){  isOptional = copy.isOptional;  isGenerated = false;  isValueSetType = false;  module = Module;}void TypeBase::PrintOn(std::ostream & strm) const{  PrintStart(strm);  PrintFinish(strm);}void TypeBase::PrintStart(std::ostream & strm) const{  strm << indent();  if (name.size()) {    strm << name << parameters << ": ";  }

⌨️ 快捷键说明

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