本文整理汇总了C++中StructPtr类的典型用法代码示例。如果您正苦于以下问题:C++ StructPtr类的具体用法?C++ StructPtr怎么用?C++ StructPtr使用的例子?那么恭喜您, 这里精选的类代码示例或许可以为您提供帮助。
在下文中一共展示了StructPtr类的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: addTypeId
void Struct::addTypeId(const TypeIdPtr &typeIdPtr)
{
StructPtr sp = StructPtr::dynamicCast(typeIdPtr->getTypePtr());
if(sp)
{
if(sp->getSid() == getSid())
{
g_parse->error("struct can't take self as member data");
}
}
for(size_t i = 0; i < _members.size(); i++)
{
if(_members[i]->getId() == typeIdPtr->getId())
{
g_parse->error("data member '" + typeIdPtr->getId() + "' duplicate definition");
}
if(_members[i]->getTag() == typeIdPtr->getTag())
{
g_parse->error("data member '" + typeIdPtr->getId() + "' has equal tag with '" + _members[i]->getId() + "'");
}
if(_members[i]->getTag() > typeIdPtr->getTag())
{
_members.insert(_members.begin() + i, typeIdPtr);
return;
}
}
_members.push_back(typeIdPtr);
}
示例2: typeChange
bool
FreezeScript::AnalyzeInitVisitor::visitStructStart(const StructPtr& v)
{
if(v->isLocal())
{
return false;
}
string scoped = v->scoped();
TypeList l = _oldUnit->lookupTypeNoBuiltin(scoped, false);
if(!l.empty())
{
StructPtr s = StructPtr::dynamicCast(l.front());
if(!s)
{
typeChange(l.front(), scoped, "struct");
}
else
{
return false;
}
}
_out.newline();
_out.newline();
_out << "<!-- struct " << scoped << " -->";
_out << se("init") << attr("type", scoped);
_out << ee;
return false;
}
示例3: typeChange
bool
FreezeScript::AnalyzeTransformVisitor::visitStructStart(const StructPtr& v)
{
if(v->isLocal())
{
return false;
}
string scoped = v->scoped();
if(ignoreType(scoped))
{
return false;
}
TypeList l = _newUnit->lookupTypeNoBuiltin(scoped, false);
if(l.empty())
{
_missingTypes.push_back(scoped);
return false;
}
StructPtr newStruct = StructPtr::dynamicCast(l.front());
if(!newStruct)
{
if(!_ignoreTypeChanges)
{
typeChange(scoped, v, l.front());
}
return false;
}
_out.newline();
_out.newline();
_out << "<!-- struct " << scoped << " -->";
_out << se("transform") << attr("type", scoped);
DataMemberList oldMembers = v->dataMembers();
DataMemberList newMembers = newStruct->dataMembers();
compareMembers(oldMembers, newMembers);
_out << ee;
return false;
}
示例4: typeToString
bool Slice::ChecksumVisitor::visitStructStart(const StructPtr& p)
{
if (p->isLocal()) {
return false;
}
ostringstream ostr;
ostr << "struct " << p->name() << endl;
DataMemberList members = p->dataMembers();
for (DataMemberList::iterator q = members.begin(); q != members.end(); ++q) {
ostr << typeToString((*q)->type()) << ' ' << (*q)->name() << endl;
}
updateMap(p->scoped(), ostr.str());
return false;
}
示例5: toTemplateArg
string
Slice::outputTypeToString(const TypePtr& type, bool optional, const StringList& metaData, int typeCtx)
{
static const char* outputBuiltinTable[] =
{
"::Ice::Byte&",
"bool&",
"::Ice::Short&",
"::Ice::Int&",
"::Ice::Long&",
"::Ice::Float&",
"::Ice::Double&",
"::std::string&",
"::Ice::ObjectPtr&",
"::Ice::ObjectPrx&",
"::Ice::LocalObjectPtr&"
};
if(optional)
{
return "IceUtil::Optional<" + toTemplateArg(typeToString(type, metaData, typeCtx)) +">&";
}
BuiltinPtr builtin = BuiltinPtr::dynamicCast(type);
if(builtin)
{
if(builtin->kind() == Builtin::KindString)
{
return stringTypeToString(type, metaData, typeCtx) + "&";
}
else
{
return outputBuiltinTable[builtin->kind()];
}
}
ClassDeclPtr cl = ClassDeclPtr::dynamicCast(type);
if(cl)
{
return fixKwd(cl->scoped() + "Ptr&");
}
StructPtr st = StructPtr::dynamicCast(type);
if(st)
{
if(findMetaData(st->getMetaData()) == "%class")
{
return fixKwd(st->scoped() + "Ptr&");
}
return fixKwd(st->scoped()) + "&";
}
ProxyPtr proxy = ProxyPtr::dynamicCast(type);
if(proxy)
{
return fixKwd(proxy->_class()->scoped() + "Prx&");
}
SequencePtr seq = SequencePtr::dynamicCast(type);
if(seq)
{
return sequenceTypeToString(seq, metaData, typeCtx) + "&";
}
DictionaryPtr dict = DictionaryPtr::dynamicCast(type);
if(dict)
{
return dictionaryTypeToString(dict, metaData, typeCtx) + "&";
}
ContainedPtr contained = ContainedPtr::dynamicCast(type);
if(contained)
{
return fixKwd(contained->scoped()) + "&";
}
return "???";
}
示例6: stringTypeToString
string
Slice::typeToString(const TypePtr& type, const StringList& metaData, int typeCtx)
{
static const char* builtinTable[] =
{
"::Ice::Byte",
"bool",
"::Ice::Short",
"::Ice::Int",
"::Ice::Long",
"::Ice::Float",
"::Ice::Double",
"::std::string",
"::Ice::ObjectPtr",
"::Ice::ObjectPrx",
"::Ice::LocalObjectPtr"
};
BuiltinPtr builtin = BuiltinPtr::dynamicCast(type);
if(builtin)
{
if(builtin->kind() == Builtin::KindString)
{
return stringTypeToString(type, metaData, typeCtx);
}
else
{
return builtinTable[builtin->kind()];
}
}
ClassDeclPtr cl = ClassDeclPtr::dynamicCast(type);
if(cl)
{
return fixKwd(cl->scoped() + "Ptr");
}
StructPtr st = StructPtr::dynamicCast(type);
if(st)
{
if(findMetaData(st->getMetaData()) == "%class")
{
return fixKwd(st->scoped() + "Ptr");
}
return fixKwd(st->scoped());
}
ProxyPtr proxy = ProxyPtr::dynamicCast(type);
if(proxy)
{
return fixKwd(proxy->_class()->scoped() + "Prx");
}
SequencePtr seq = SequencePtr::dynamicCast(type);
if(seq)
{
return sequenceTypeToString(seq, metaData, typeCtx);
}
DictionaryPtr dict = DictionaryPtr::dynamicCast(type);
if(dict)
{
return dictionaryTypeToString(dict, metaData, typeCtx);
}
ContainedPtr contained = ContainedPtr::dynamicCast(type);
if(contained)
{
return fixKwd(contained->scoped());
}
EnumPtr en = EnumPtr::dynamicCast(type);
if(en)
{
return fixKwd(en->scoped());
}
return "???";
}
示例7: toTemplateArg
string
Slice::outputTypeToString(const TypePtr& type, bool optional, const StringList& metaData, int typeCtx, bool cpp11)
{
static const char* outputBuiltinTable[] =
{
"::Ice::Byte&",
"bool&",
"::Ice::Short&",
"::Ice::Int&",
"::Ice::Long&",
"::Ice::Float&",
"::Ice::Double&",
"::std::string&",
"::Ice::ObjectPtr&",
"::Ice::ObjectPrxPtr&",
"::Ice::LocalObjectPtr&",
"::Ice::ValuePtr&"
};
static const char* cpp11OutputBuiltinTable[] =
{
"::Ice::Byte&",
"bool&",
"short&",
"int&",
"long long int&",
"float&",
"double&",
"::std::string&",
"::std::shared_ptr<::Ice::Object>&",
"::std::shared_ptr<::Ice::ObjectPrx>&",
"::std::shared_ptr<void>&",
"::std::shared_ptr<::Ice::Value>&"
};
if(optional)
{
return "IceUtil::Optional<" + toTemplateArg(typeToString(type, metaData, typeCtx, cpp11)) +">&";
}
BuiltinPtr builtin = BuiltinPtr::dynamicCast(type);
if(builtin)
{
if(builtin->kind() == Builtin::KindString)
{
return stringTypeToString(type, metaData, typeCtx) + "&";
}
else
{
if(cpp11)
{
if(builtin->kind() == Builtin::KindObject && !(typeCtx & TypeContextLocalOperation))
{
return "::std::shared_ptr<::Ice::Value>";
}
else
{
return cpp11OutputBuiltinTable[builtin->kind()];
}
}
else
{
return outputBuiltinTable[builtin->kind()];
}
}
}
ClassDeclPtr cl = ClassDeclPtr::dynamicCast(type);
if(cl)
{
if(cpp11)
{
if(cl->isInterface() && !cl->isLocal())
{
return "::std::shared_ptr<::Ice::Value>&";
}
else
{
return "::std::shared_ptr<" + fixKwd(cl->scoped()) + ">&";
}
}
else
{
return fixKwd(cl->scoped() + "Ptr&");
}
}
StructPtr st = StructPtr::dynamicCast(type);
if(st)
{
if(!cpp11 && findMetaData(st->getMetaData()) == "%class")
{
return fixKwd(st->scoped() + "Ptr&");
}
else
{
return fixKwd(st->scoped()) + "&";
}
}
//.........这里部分代码省略.........
示例8: stringTypeToString
string
Slice::typeToString(const TypePtr& type, const StringList& metaData, int typeCtx, bool cpp11)
{
static const char* builtinTable[] =
{
"::Ice::Byte",
"bool",
"::Ice::Short",
"::Ice::Int",
"::Ice::Long",
"::Ice::Float",
"::Ice::Double",
"::std::string",
"::Ice::ObjectPtr",
"::Ice::ObjectPrx",
"::Ice::LocalObjectPtr",
"::Ice::ValuePtr"
};
static const char* cpp11BuiltinTable[] =
{
"::Ice::Byte",
"bool",
"short",
"int",
"long long int",
"float",
"double",
"::std::string",
"::std::shared_ptr<::Ice::Object>",
"::std::shared_ptr<::Ice::ObjectPrx>",
"::std::shared_ptr<void>",
"::std::shared_ptr<::Ice::Value>"
};
BuiltinPtr builtin = BuiltinPtr::dynamicCast(type);
if(builtin)
{
if(builtin->kind() == Builtin::KindString)
{
return stringTypeToString(type, metaData, typeCtx);
}
else
{
if(cpp11)
{
if(builtin->kind() == Builtin::KindObject && !(typeCtx & TypeContextLocalOperation))
{
return "::std::shared_ptr<::Ice::Value>";
}
else
{
return cpp11BuiltinTable[builtin->kind()];
}
}
else
{
return builtinTable[builtin->kind()];
}
}
}
ClassDeclPtr cl = ClassDeclPtr::dynamicCast(type);
if(cl)
{
//
// C++11 mapping accepts cpp11:type metadata for classes and proxies
//
if(cpp11)
{
string t;
if(cpp11 && findMetaData("cpp11:type:", cl, t))
{
return t;
}
else if(cl->definition() && cl->definition()->isDelegate())
{
return classDefToDelegateString(cl->definition());
}
else
{
if(cl->isInterface() && !cl->isLocal())
{
return "std::shared_ptr<::Ice::Value>";
}
else
{
return "::std::shared_ptr<" + cl->scoped() + ">";
}
}
}
else
{
return cl->scoped() + "Ptr";
}
}
StructPtr st = StructPtr::dynamicCast(type);
if(st)
{
//.........这里部分代码省略.........
示例9: incTab
int TarsAnalyzer::readStruct(const StructPtr & pPtr, const NamespacePtr & nPtr)
{
vector<TypeIdPtr>& member = pPtr->getAllMemberPtr();
AnalyzerDataHead h;
size_t hLen = h.peekFrom(*this);
if (AnalyzerDataHead::eStructBegin == h.getType()) // 检查结构开始
{
cout << endl;
incTab();
cout << getTab()<< "struct " << pPtr->getId() << " {" << endl;
skip(hLen);
}
//解析struct成员变量
for (size_t i = 0; i < member.size(); i++)
{
cout<< getTab() <<"expect tag ";
cout.setf(ios::right);
cout.width(CHAR_WIDTH_TAG);
cout<< member[i]->getTag();
cout.width(CHAR_WIDTH_ID); // 成员名12字符宽
cout<< member[i]->getId();
//获取tup版本号
if(isTup() && (pPtr->getId() == "RequestPacket"))
{
if(member[i]->getTag() == 1)
{
char iVer = 2;
this->peekBuf(&iVer, sizeof(iVer),1);
_tupVersion = iVer;
}
else if(member[i]->getTag() == 7)///解析sbuffer
{
_tup_sbuffer_pos = _cur;
_cur +=2; //7D 00
int n;
uint8_t tag = 0;
int realType;
read(n, tag, realType, true ); //sbuffer的长度
if(_tupVersion == 2)
{
read(_tup2_helper, 7);
_bIsDumpTup?dumpTup(_tup2_helper):(void(0));
}
else///3
{
read(_tup3_helper, 7);
_bIsDumpTup?dumpTup(_tup3_helper):(void(0));
}
_cur = _tup_sbuffer_pos;
}
}
//读取内置基本类型
BuiltinPtr bPtr = BuiltinPtr::dynamicCast(member[i]->getTypePtr());
if (bPtr)
{
cout.width(CHAR_WIDTH_TYPE);
cout<<tostrBuiltin(bPtr);
cout<<getSep();
readBuiltin(bPtr, member[i]->getTag(), member[i]->isRequire(), NULL);
}
VectorPtr vPtr = VectorPtr::dynamicCast(member[i]->getTypePtr());
if (vPtr)
{
cout.width(CHAR_WIDTH_TYPE);
cout<<tostrVector(vPtr);
cout<<getSep();
readVector(vPtr, member[i]->getTag(),member[i]->isRequire(), NULL);
}
MapPtr mPtr = MapPtr::dynamicCast(member[i]->getTypePtr());
if (mPtr)
{
cout.width(CHAR_WIDTH_TYPE);
cout<<tostrMap(mPtr);
cout<<getSep();
readMap(mPtr, member[i]->getTag(), member[i]->isRequire());
}
StructPtr sPtr = StructPtr::dynamicCast(member[i]->getTypePtr());
if (sPtr)
{
cout.width(CHAR_WIDTH_TYPE);
cout<< tostrStruct(sPtr);
cout<<getSep();
readStruct(sPtr, NULL);
}
EnumPtr ePtr = EnumPtr::dynamicCast(member[i]->getTypePtr());
if (ePtr)
{
//.........这里部分代码省略.........
示例10: switch
string
Slice::ObjCGenerator::getOptionalFormat(const TypePtr& type)
{
BuiltinPtr bp = BuiltinPtr::dynamicCast(type);
if(bp)
{
switch(bp->kind())
{
case Builtin::KindByte:
case Builtin::KindBool:
{
return "ICEOptionalFormatF1";
}
case Builtin::KindShort:
{
return "ICEOptionalFormatF2";
}
case Builtin::KindInt:
case Builtin::KindFloat:
{
return "ICEOptionalFormatF4";
}
case Builtin::KindLong:
case Builtin::KindDouble:
{
return "ICEOptionalFormatF8";
}
case Builtin::KindString:
{
return "ICEOptionalFormatVSize";
}
case Builtin::KindObject:
case Builtin::KindValue:
{
return "ICEOptionalFormatClass";
}
case Builtin::KindObjectProxy:
{
return "ICEOptionalFormatFSize";
}
case Builtin::KindLocalObject:
{
assert(false);
break;
}
}
}
if(EnumPtr::dynamicCast(type))
{
return "ICEOptionalFormatSize";
}
SequencePtr seq = SequencePtr::dynamicCast(type);
if(seq)
{
return seq->type()->isVariableLength() ? "ICEOptionalFormatFSize" : "ICEOptionalFormatVSize";
}
DictionaryPtr d = DictionaryPtr::dynamicCast(type);
if(d)
{
return (d->keyType()->isVariableLength() || d->valueType()->isVariableLength()) ?
"ICEOptionalFormatFSize" : "ICEOptionalFormatVSize";
}
StructPtr st = StructPtr::dynamicCast(type);
if(st)
{
return st->isVariableLength() ? "ICEOptionalFormatFSize" : "ICEOptionalFormatVSize";
}
if(ProxyPtr::dynamicCast(type))
{
return "ICEOptionalFormatFSize";
}
ClassDeclPtr cl = ClassDeclPtr::dynamicCast(type);
assert(cl);
return "ICEOptionalFormatClass";
}
示例11: if
bool
FreezeScript::AnalyzeTransformVisitor::visitStructStart(const StructPtr& v)
{
if(v->isLocal())
{
return false;
}
string scoped = v->scoped();
if(ignoreType(scoped))
{
return false;
}
TypeList l = _newUnit->lookupTypeNoBuiltin(scoped, false);
if(l.empty())
{
_missingTypes.push_back(scoped);
return false;
}
//
// Allow transforming from struct to class.
//
StructPtr newStruct = StructPtr::dynamicCast(l.front());
ClassDeclPtr decl = ClassDeclPtr::dynamicCast(l.front());
ClassDefPtr newClass;
if(decl)
{
newClass = decl->definition();
if(!newClass)
{
_missingTypes.push_back(scoped);
return false;
}
}
else if(!newStruct)
{
if(!_ignoreTypeChanges)
{
typeChange(scoped, v, l.front());
}
return false;
}
_out.newline();
_out.newline();
if(newClass)
{
_out << "<!-- class " << scoped << " -->";
}
else
{
_out << "<!-- struct " << scoped << " -->";
}
_out << se("transform") << attr("type", scoped);
DataMemberList oldMembers, newMembers;
if(newClass)
{
oldMembers = v->dataMembers();
newMembers = newClass->allDataMembers();
}
else
{
oldMembers = v->dataMembers();
newMembers = newStruct->dataMembers();
}
compareMembers(oldMembers, newMembers);
_out << ee;
return false;
}
示例12: __clone
string Jce2Php::generatePHP(const StructPtr &pPtr, const string& namespaceId) const
{
ostringstream s;
vector<TypeIdPtr>& member = pPtr->getAllMemberPtr();
s << TAB << "class " << pPtr->getId() << " extends c_struct" << endl;
s << TAB << "{" << endl;
INC_TAB;
//变量声明
for(size_t k = 0;k < member.size();k++)
{
s<< TAB << "public $" <<member[k]->getId()<<";"<<endl;
}
s<<endl;
s << TAB << "public function __clone()" << endl;
s << TAB << "{" << endl;
INC_TAB;
for(size_t k = 0;k < member.size();k++)
{
s<< TAB << "$this->" <<member[k]->getId()<<" = clone $this->"<<member[k]->getId()<<";"<<endl;
}
DEL_TAB;
s << TAB << "}" << endl;
s <<endl;
s << TAB << "public function __construct()" << endl;
s << TAB << "{" << endl;
INC_TAB;
for(size_t k = 0;k < member.size();k++)
{
s<< TAB << "$this->" <<member[k]->getId()<<" = new "<< tostr(member[k]->getTypePtr())<<";"<<endl;
}
DEL_TAB;
s << TAB << "}" << endl;
s <<endl;
////////////////////////////////////////////////////////////
s << TAB << "public function get_class_name()" << endl;
s << TAB << "{" << endl;
INC_TAB;
s << TAB << "return " << "\"" << namespaceId << "." << pPtr->getId() << "\"" << ";" << endl;
DEL_TAB;
s << TAB << "}" << endl;
s<<endl;
//write begin
if(m_bPDU)
{
s << TAB << "public function writeTo(&$_out,$tag)" << endl;
s << TAB << "{" << endl;
INC_TAB;
//s << TAB << "jce_header::_pack_header($_out,'c_struct_begin',$tag);" << endl;
}
else
{
s << TAB << "public function write(&$_out,$tag)" << endl;
s << TAB << "{" << endl;
INC_TAB;
s << TAB << "jce_header::_pack_header($_out,'c_struct_begin',$tag);" << endl;
}
for(size_t j = 0; j < member.size(); j++)
{
s << writeTo(member[j]);
}
if(m_bPDU)
{
//s << TAB << "jce_header::_pack_header($_out,'c_struct_end',0);" << endl;
}
else
{
s << TAB << "jce_header::_pack_header($_out,'c_struct_end',0);" << endl;
}
DEL_TAB;
s << TAB << "}" << endl;
//write end
///read begin
if(m_bPDU)
{
s << TAB << "public function readFrom(&$_in,$tag,$isRequire = true)" << endl;
s << TAB << "{" << endl;
INC_TAB;
#if 0
s << TAB << "jce_header::_peek_header($_in,$type,$this_tag);"<<endl;
s << TAB << "if($tag != $this_tag)" <<endl;
s << TAB << "{" << endl;
INC_TAB;
s << TAB << "if($isRequire == true){"<<endl;
s << TAB << "throw new JceException(__LINE__ ,TAG_NOT_MATCH);"<<endl;
s << TAB << "}else{" <<endl;
INC_TAB;
s << TAB << "return;"<<endl;
//.........这里部分代码省略.........
示例13:
/*******************************StructPtr********************************/
string Jce2Php::tostrStruct(const StructPtr &pPtr) const
{
return pPtr->getId();
}
示例14: fixIdent
bool
Slice::Ruby::CodeVisitor::visitStructStart(const StructPtr& p)
{
string scoped = p->scoped();
string name = fixIdent(p->name(), IdentToUpper);
MemberInfoList memberList;
MemberInfoList::iterator r;
{
DataMemberList members = p->dataMembers();
for(DataMemberList::iterator q = members.begin(); q != members.end(); ++q)
{
memberList.push_back(MemberInfo());
memberList.back().lowerName = fixIdent((*q)->name(), IdentToLower);
memberList.back().fixedName = fixIdent((*q)->name(), IdentNormal);
memberList.back().inherited = false;
memberList.back().dataMember = *q;
}
}
_out << sp << nl << "if not defined?(" << getAbsolute(p, IdentToUpper) << ')';
_out.inc();
_out << nl << "class " << name;
_out.inc();
if(!memberList.empty())
{
_out << nl << "def initialize(";
writeConstructorParams(memberList);
_out << ")";
_out.inc();
for(r = memberList.begin(); r != memberList.end(); ++r)
{
_out << nl << '@' << r->fixedName << " = " << r->lowerName;
}
_out.dec();
_out << nl << "end";
}
//
// hash
//
_out << sp << nl << "def hash";
_out.inc();
_out << nl << "_h = 0";
int iter = 0;
for(r = memberList.begin(); r != memberList.end(); ++r)
{
writeHash("@" + r->fixedName, r->dataMember->type(), iter);
}
_out << nl << "_h % 0x7fffffff";
_out.dec();
_out << nl << "end";
//
// ==
//
_out << sp << nl << "def ==(other)";
_out.inc();
_out << nl << "return false if";
_out.inc();
for(r = memberList.begin(); r != memberList.end(); ++r)
{
if(r != memberList.begin())
{
_out << " or";
}
_out << nl << "@" << r->fixedName << " != other." << r->fixedName;
}
_out.dec();
_out << nl << "true";
_out.dec();
_out << nl << "end";
//
// eql?
//
// This method is used to determine the equality of keys in a Hash object.
//
_out << sp << nl << "def eql?(other)";
_out.inc();
_out << nl << "return other.class == self.class && other == self";
_out.dec();
_out << nl << "end";
//
// inspect
//
_out << sp << nl << "def inspect";
_out.inc();
_out << nl << "::Ice::__stringify(self, T_" << name << ")";
_out.dec();
_out << nl << "end";
//
// read/write accessors for data members.
//
if(!memberList.empty())
{
_out << sp << nl << "attr_accessor ";
for(r = memberList.begin(); r != memberList.end(); ++r)
//.........这里部分代码省略.........
示例15: __construct
bool
CodeVisitor::visitStructStart(const StructPtr& p)
{
string scoped = p->scoped();
string name = getName(p);
string type = getTypeVar(p);
string abs = getAbsolute(p, _ns);
MemberInfoList memberList;
MemberInfoList::iterator r;
{
DataMemberList members = p->dataMembers();
for(DataMemberList::iterator q = members.begin(); q != members.end(); ++q)
{
memberList.push_back(MemberInfo());
memberList.back().fixedName = fixIdent((*q)->name());
memberList.back().inherited = false;
memberList.back().dataMember = *q;
}
}
startNamespace(p);
_out << sp << nl << "if(!class_exists('" << escapeName(abs) << "'))";
_out << sb;
_out << nl << "class " << name;
_out << sb;
_out << nl << "public function __construct(";
writeConstructorParams(memberList);
_out << ")";
_out << sb;
for(r = memberList.begin(); r != memberList.end(); ++r)
{
writeAssign(*r);
}
_out << eb;
//
// __toString
//
_out << sp << nl << "public function __toString()";
_out << sb;
_out << nl << "global " << type << ';';
_out << nl << "return IcePHP_stringify($this, " << type << ");";
_out << eb;
if(!memberList.empty())
{
_out << sp;
for(r = memberList.begin(); r != memberList.end(); ++r)
{
_out << nl << "public $" << r->fixedName << ';';
}
}
_out << eb;
//
// Emit the type information.
//
_out << sp << nl << type << " = IcePHP_defineStruct('" << scoped << "', '" << escapeName(abs) << "', array(";
//
// Data members are represented as an array:
//
// ('MemberName', MemberType)
//
// where MemberType is either a primitive type constant (T_INT, etc.) or the id of a constructed type.
//
for(r = memberList.begin(); r != memberList.end(); ++r)
{
if(r != memberList.begin())
{
_out << ", ";
}
_out.inc();
_out << nl << "array('" << r->fixedName << "', ";
writeType(r->dataMember->type());
_out << ')';
_out.dec();
}
_out << "));";
_out << eb;
endNamespace();
return false;
}