本文整理汇总了C++中XPCNativeMember::SetConstant方法的典型用法代码示例。如果您正苦于以下问题:C++ XPCNativeMember::SetConstant方法的具体用法?C++ XPCNativeMember::SetConstant怎么用?C++ XPCNativeMember::SetConstant使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类XPCNativeMember
的用法示例。
在下文中一共展示了XPCNativeMember::SetConstant方法的2个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: sizeof
//.........这里部分代码省略.........
const nsXPTMethodInfo* info;
if (NS_FAILED(aInfo->GetMethodInfo(i, &info))) {
failed = true;
break;
}
// don't reflect Addref or Release
if (i == 1 || i == 2)
continue;
if (!XPCConvert::IsMethodReflectable(*info))
continue;
str = JS_InternString(ccx, info->GetName());
if (!str) {
NS_ERROR("bad method name");
failed = true;
break;
}
name = INTERNED_STRING_TO_JSID(ccx, str);
if (info->IsSetter()) {
NS_ASSERTION(realTotalCount,"bad setter");
// Note: ASSUMES Getter/Setter pairs are next to each other
// This is a rule of the typelib spec.
cur = &members[realTotalCount-1];
NS_ASSERTION(cur->GetName() == name,"bad setter");
NS_ASSERTION(cur->IsReadOnlyAttribute(),"bad setter");
NS_ASSERTION(cur->GetIndex() == i-1,"bad setter");
cur->SetWritableAttribute();
} else {
// XXX need better way to find dups
// NS_ASSERTION(!LookupMemberByID(name),"duplicate method name");
cur = &members[realTotalCount++];
cur->SetName(name);
if (info->IsGetter())
cur->SetReadOnlyAttribute(i);
else
cur->SetMethod(i);
}
}
if (!failed) {
for (i = 0; i < constCount; i++) {
const nsXPTConstant* constant;
if (NS_FAILED(aInfo->GetConstant(i, &constant))) {
failed = true;
break;
}
str = JS_InternString(ccx, constant->GetName());
if (!str) {
NS_ERROR("bad constant name");
failed = true;
break;
}
name = INTERNED_STRING_TO_JSID(ccx, str);
// XXX need better way to find dups
//NS_ASSERTION(!LookupMemberByID(name),"duplicate method/constant name");
cur = &members[realTotalCount++];
cur->SetName(name);
cur->SetConstant(i);
}
}
if (!failed) {
const char* bytes;
if (NS_FAILED(aInfo->GetNameShared(&bytes)) || !bytes ||
nsnull == (str = JS_InternString(ccx, bytes))) {
failed = true;
}
interfaceName = INTERNED_STRING_TO_JSID(ccx, str);
}
if (!failed) {
// Use placement new to create an object with the right amount of space
// to hold the members array
int size = sizeof(XPCNativeInterface);
if (realTotalCount > 1)
size += (realTotalCount - 1) * sizeof(XPCNativeMember);
void* place = new char[size];
if (place)
obj = new(place) XPCNativeInterface(aInfo, interfaceName);
if (obj) {
obj->mMemberCount = realTotalCount;
// copy valid members
if (realTotalCount)
memcpy(obj->mMembers, members,
realTotalCount * sizeof(XPCNativeMember));
}
}
if (members && members != local_members)
delete [] members;
return obj;
}
示例2: str
//.........这里部分代码省略.........
if (!str) {
NS_ERROR("bad method name");
failed = true;
break;
}
jsid name = INTERNED_STRING_TO_JSID(cx, str);
if (info->IsSetter()) {
MOZ_ASSERT(realTotalCount,"bad setter");
// Note: ASSUMES Getter/Setter pairs are next to each other
// This is a rule of the typelib spec.
cur = &members[realTotalCount-1];
MOZ_ASSERT(cur->GetName() == name,"bad setter");
MOZ_ASSERT(cur->IsReadOnlyAttribute(),"bad setter");
MOZ_ASSERT(cur->GetIndex() == i-1,"bad setter");
cur->SetWritableAttribute();
} else {
// XXX need better way to find dups
// MOZ_ASSERT(!LookupMemberByID(name),"duplicate method name");
if (realTotalCount == XPCNativeMember::GetMaxIndexInInterface()) {
NS_WARNING("Too many members in interface");
failed = true;
break;
}
cur = &members[realTotalCount];
cur->SetName(name);
if (info->IsGetter())
cur->SetReadOnlyAttribute(i);
else
cur->SetMethod(i);
cur->SetIndexInInterface(realTotalCount);
++realTotalCount;
}
}
if (!failed) {
for (i = 0; i < constCount; i++) {
RootedValue constant(cx);
nsXPIDLCString namestr;
if (NS_FAILED(aInfo->GetConstant(i, &constant, getter_Copies(namestr)))) {
failed = true;
break;
}
str = JS_AtomizeAndPinString(cx, namestr);
if (!str) {
NS_ERROR("bad constant name");
failed = true;
break;
}
jsid name = INTERNED_STRING_TO_JSID(cx, str);
// XXX need better way to find dups
//MOZ_ASSERT(!LookupMemberByID(name),"duplicate method/constant name");
if (realTotalCount == XPCNativeMember::GetMaxIndexInInterface()) {
NS_WARNING("Too many members in interface");
failed = true;
break;
}
cur = &members[realTotalCount];
cur->SetName(name);
cur->SetConstant(i);
cur->SetIndexInInterface(realTotalCount);
++realTotalCount;
}
}
if (!failed) {
const char* bytes;
if (NS_FAILED(aInfo->GetNameShared(&bytes)) || !bytes ||
nullptr == (str = JS_AtomizeAndPinString(cx, bytes))) {
failed = true;
}
interfaceName = INTERNED_STRING_TO_JSID(cx, str);
}
if (!failed) {
// Use placement new to create an object with the right amount of space
// to hold the members array
int size = sizeof(XPCNativeInterface);
if (realTotalCount > 1)
size += (realTotalCount - 1) * sizeof(XPCNativeMember);
void* place = new char[size];
if (place)
obj = new(place) XPCNativeInterface(aInfo, interfaceName);
if (obj) {
obj->mMemberCount = realTotalCount;
// copy valid members
if (realTotalCount)
memcpy(obj->mMembers, members,
realTotalCount * sizeof(XPCNativeMember));
}
}
if (members && members != local_members)
delete [] members;
return obj;
}