/* IDEA: This is a temporary solution and not very robust. We should implement a real reflection API. */ static AValue TestC_Members(AThread *t, AValue *frame) { int n; MemberStruct members[MAX_MEMBERS]; ATypeInfo *type; int i; if (!AIsInstance(frame[0])) return ARaiseTypeErrorND(t, NULL); type = AGetInstanceType(AValueToInstance(frame[0])); n = NumMembers(type); if (n > MAX_MEMBERS) return ARaiseValueErrorND(t, NULL); GetMembers(members, type); SortMembers(members, n); frame[1] = AMakeArray(t, n); if (AIsError(frame[1])) return AError; for (i = 0; i < n; i++) { frame[2] = AMakeStr(t, members[i].name); ASetArrayItem(t, frame[1], i, frame[2]); } return frame[1]; }
const SkMemberInfo* SkDisplayType::GetMember(SkAnimateMaker* maker, SkDisplayTypes type, const char** matchPtr ) { int infoCount = 0; // Initialize to remove a warning. const SkMemberInfo* info = GetMembers(maker, type, &infoCount); info = SkMemberInfo::Find(info, infoCount, matchPtr); // SkASSERT(info); return info; }
// !!! optimize this by replacing function with a byte-sized lookup table SkDisplayTypes SkDisplayType::GetParent(SkAnimateMaker* maker, SkDisplayTypes base) { if (base == SkType_Group || base == SkType_Save || base == SkType_SaveLayer) //!!! cheat a little until we have a lookup table return SkType_Displayable; if (base == SkType_Set) return SkType_Animate; // another cheat until we have a lookup table const SkMemberInfo* info = GetMembers(maker, base, NULL); // get info for this type SkASSERT(info); if (info->fType != SkType_BaseClassInfo) return SkType_Unknown; // if no base, done // !!! could change SK_MEMBER_INHERITED macro to take type, stuff in offset, so that // this (and table builder) could know type without the following steps: const SkMemberInfo* inherited = info->getInherited(); SkDisplayTypes result = (SkDisplayTypes) (SkType_Unknown + 1); for (; result <= SkType_Xfermode; result = (SkDisplayTypes) (result + 1)) { const SkMemberInfo* match = GetMembers(maker, result, NULL); if (match == inherited) break; } SkASSERT(result <= SkType_Xfermode); return result; }
/* Get the public members of a type. */ static int GetMembers(MemberStruct *m, ATypeInfo *type) { int i; if (type == NULL) return 0; i = GetMembers(m, type->super); i = GetTableMembers(m, i, type->memberTable[MT_VAR_GET_PUBLIC], FALSE); i = GetTableMembers(m, i, type->memberTable[MT_METHOD_PUBLIC], TRUE); return i; }
bool DistributionList::XMLStore(XNode *pParentNode, int iOptions) { XNode *pNode = pParentNode->AppendChild(_T("DistributionList")); String sListMode; sListMode.Format(_T("%d"), m_eListMode); pNode->AppendAttr(_T("Name"), m_sAddress); pNode->AppendAttr(_T("Active"), m_bEnabled ? _T("1") : _T("0")); pNode->AppendAttr(_T("RequiresAuth"), m_bRequireAuth ? _T("1") : _T("0")); pNode->AppendAttr(_T("RequiresAuthAddress"), m_sRequireAddress); pNode->AppendAttr(_T("ListMode"), sListMode); return GetMembers()->XMLStore(pNode, iOptions); }
void pgGroup::ShowTreeDetail(ctlTree *browser, frmMain *form, ctlListView *properties, ctlSQLBox *sqlPane) { if (!expandedKids) { expandedKids = true; if (!memberIds.IsEmpty()) { wxString ml = memberIds; ml.Replace(wxT(" "), wxT(",")); pgSet *set = server->ExecuteSet(wxT( "SELECT usename FROM pg_user WHERE usesysid IN (") + ml + wxT(")")); if (set) { while (!set->Eof()) { wxString user = set->GetVal(0); if (memberCount) { members += wxT(", "); quotedMembers += wxT(", "); } members += user; quotedMembers += qtIdent(user); memberCount++; usersIn.Add(user); set->MoveNext(); } delete set; } } } if (properties) { CreateListColumns(properties); properties->AppendItem(_("Name"), GetName()); properties->AppendItem(_("Group ID"), GetGroupId()); properties->AppendItem(_("Member count"), GetMemberCount()); properties->AppendItem(_("Members"), GetMembers()); } }
void SkDisplayType::UnitTest() { SkAnimator animator; SkAnimateMaker* maker = animator.fMaker; int index; for (index = 0; index < kTypeNamesSize - 1; index++) { SkASSERT(strcmp(gTypeNames[index].fName, gTypeNames[index + 1].fName) < 0); SkASSERT(gTypeNames[index].fType < gTypeNames[index + 1].fType); } for (index = 0; index < kTypeNamesSize; index++) { SkDisplayable* test = CreateInstance(maker, gTypeNames[index].fType); if (test == NULL) continue; #if defined _WIN32 && _MSC_VER >= 1300 && defined _INC_CRTDBG // only on windows, only if using "crtdbg.h" // we know that crtdbg puts 0xfdfdfdfd at the end of the block // look for unitialized memory, signature 0xcdcdcdcd prior to that int* start = (int*) test; while (*start != 0xfdfdfdfd) { SkASSERT(*start != 0xcdcdcdcd); start++; } #endif delete test; } for (index = 0; index < kTypeNamesSize; index++) { int infoCount; const SkMemberInfo* info = GetMembers(maker, gTypeNames[index].fType, &infoCount); if (info == NULL) continue; #if SK_USE_CONDENSED_INFO == 0 for (int inner = 0; inner < infoCount - 1; inner++) { if (info[inner].fType == SkType_BaseClassInfo) continue; SkASSERT(strcmp(info[inner].fName, info[inner + 1].fName) < 0); } #endif } #if defined SK_DEBUG || defined SK_BUILD_CONDENSED BuildCondensedInfo(maker); #endif }
void spInterFileContext::GenrateContents() { MMemberListT& lst = GetMembers(); for( size_t f = 0; f != lst.size(); ++f ) { wxString& fname = ((spFile*)lst[f])->m_FileName; size_t fileNo = GetFileNo( fname ); wxString& source = m_Contents[ fileNo ]; wxString result; size_t lastKnownPos = 0, // the begining of the file is always "known" lastSavedPos = 0; mCurFileNo = fileNo; GenerateContextBody( *lst[f], source, result, lastSavedPos, lastKnownPos ); // the end of file is always known lastKnownPos = m_Contents[ fileNo ].length(); // append the reminder DoAppendSourceFragment( source, result, size_t(lastSavedPos), size_t(lastKnownPos - lastSavedPos) ); // replace original contnet with newly generated one m_Contents[ fileNo ] = result; } }
void SkDisplayType::BuildCondensedInfo(SkAnimateMaker* maker) { gInfos.setCount(kNumberOfTypes); memset(gInfos.begin(), 0, sizeof(gInfos[0]) * kNumberOfTypes); gInfosCounts.setCount(kNumberOfTypes); memset(gInfosCounts.begin(), -1, sizeof(gInfosCounts[0]) * kNumberOfTypes); // check to see if it is condensable int index, infoCount; for (index = 0; index < kTypeNamesSize; index++) { const SkMemberInfo* info = GetMembers(maker, gTypeNames[index].fType, &infoCount); if (info == NULL) continue; AddInfo(gTypeNames[index].fType, info, infoCount); } const SkMemberInfo* extraInfo = SkDisplayType::GetMembers(maker, SkType_3D_Point, &infoCount); AddInfo(SkType_Point, extraInfo, infoCount); AddInfo(SkType_3D_Point, extraInfo, infoCount); // int baseInfos = gInfos.count(); do { SkTDMemberInfoArray oldRefs = gUnknowns; SkTDIntArray oldRefCounts = gUnknownsCounts; gUnknowns.reset(); gUnknownsCounts.reset(); for (index = 0; index < oldRefs.count(); index++) { const SkMemberInfo* info = oldRefs[index]; if (gInfos.find(info) == -1) { int typeIndex = 0; for (; typeIndex < kNumberOfTypes; typeIndex++) { const SkMemberInfo* temp = SkDisplayType::GetMembers( maker, (SkDisplayTypes) typeIndex, NULL); if (temp == info) break; } SkASSERT(typeIndex < kNumberOfTypes); AddInfo((SkDisplayTypes) typeIndex, info, oldRefCounts[index]); } } } while (gUnknowns.count() > 0); qsort(gInfosTypeIDs.begin(), gInfosTypeIDs.count(), sizeof(gInfosTypeIDs[0]), &type_compare); #ifdef SK_DEBUG FILE* condensed = fopen("../../src/animator/SkCondensedDebug.cpp", "w+"); fprintf(condensed, "#include \"SkTypes.h\"\n"); fprintf(condensed, "#ifdef SK_DEBUG\n"); #else FILE* condensed = fopen("../../src/animator/SkCondensedRelease.cpp", "w+"); fprintf(condensed, "#include \"SkTypes.h\"\n"); fprintf(condensed, "#ifdef SK_RELEASE\n"); #endif // write header fprintf(condensed, "// This file was automatically generated.\n"); fprintf(condensed, "// To change it, edit the file with the matching debug info.\n"); fprintf(condensed, "// Then execute SkDisplayType::BuildCondensedInfo() to " "regenerate this file.\n\n"); // write name of memberInfo int typeNameIndex = 0; int unknown = 1; for (index = 0; index < gInfos.count(); index++) { const SkMemberInfo* info = gInfos[index]; if (info == NULL) continue; char scratch[64]; bool drawPrefix, displayPrefix; while (gTypeNames[typeNameIndex].fType < index) typeNameIndex++; if (gTypeNames[typeNameIndex].fType == index) { Get3DName(scratch, gTypeNames[typeNameIndex].fName); drawPrefix = gTypeNames[typeNameIndex].fDrawPrefix; displayPrefix = gTypeNames[typeNameIndex].fDisplayPrefix; } else { sprintf(scratch, "Unknown%d", unknown++); drawPrefix = displayPrefix = false; } WriteInfo(condensed, info, gInfosCounts[index], scratch, drawPrefix, displayPrefix); } // write array of table pointers // start here; fprintf(condensed, "static const SkMemberInfo* const gInfoTables[] = {"); typeNameIndex = 0; unknown = 1; for (index = 0; index < gInfos.count(); index++) { const SkMemberInfo* info = gInfos[index]; if (info == NULL) continue; char scratch[64]; bool drawPrefix, displayPrefix; while (gTypeNames[typeNameIndex].fType < index) typeNameIndex++; if (gTypeNames[typeNameIndex].fType == index) { Get3DName(scratch, gTypeNames[typeNameIndex].fName); drawPrefix = gTypeNames[typeNameIndex].fDrawPrefix; displayPrefix = gTypeNames[typeNameIndex].fDisplayPrefix; } else { sprintf(scratch, "Unknown%d", unknown++); drawPrefix = displayPrefix = false; } fprintf(condensed, "\n\tg"); if (drawPrefix) fprintf(condensed, "Draw"); if (displayPrefix) fprintf(condensed, "Display"); fprintf(condensed, "%sInfo", scratch); if (index < gInfos.count() - 1) putc(',', condensed); } fprintf(condensed, "\n};\n\n"); // write the array of number of entries in the info table fprintf(condensed, "static const unsigned char gInfoCounts[] = {\n\t"); int written = 0; for (index = 0; index < gInfosCounts.count(); index++) { int count = gInfosCounts[index]; if (count < 0) continue; if (written > 0) putc(',', condensed); if (written % 20 == 19) fprintf(condensed, "\n\t"); fprintf(condensed, "%d",count); written++; } fprintf(condensed, "\n};\n\n"); // write array of type ids table entries correspond to fprintf(condensed, "static const unsigned char gTypeIDs[] = {\n\t"); int typeIDCount = 0; typeNameIndex = 0; unknown = 1; for (index = 0; index < gInfosCounts.count(); index++) { const SkMemberInfo* info = gInfos[index]; if (info == NULL) continue; typeIDCount++; char scratch[64]; while (gTypeNames[typeNameIndex].fType < index) typeNameIndex++; if (gTypeNames[typeNameIndex].fType == index) { Get3DName(scratch, gTypeNames[typeNameIndex].fName); } else sprintf(scratch, "Unknown%d", unknown++); fprintf(condensed, "%d%c // %s\n\t", index, index < gInfosCounts.count() ? ',' : ' ', scratch); } fprintf(condensed, "\n};\n\n"); fprintf(condensed, "static const int kTypeIDs = %d;\n\n", typeIDCount); // write the array of string pointers fprintf(condensed, "static const char* const gInfoNames[] = {"); typeNameIndex = 0; unknown = 1; written = 0; for (index = 0; index < gInfosCounts.count(); index++) { const SkMemberInfo* info = gInfos[index]; if (info == NULL) continue; if (written > 0) putc(',', condensed); written++; fprintf(condensed, "\n\tg"); char scratch[64]; while (gTypeNames[typeNameIndex].fType < index) typeNameIndex++; if (gTypeNames[typeNameIndex].fType == index) { Get3DName(scratch, gTypeNames[typeNameIndex].fName); } else sprintf(scratch, "Unknown%d", unknown++); fprintf(condensed, "%sStrings", scratch); } fprintf(condensed, "\n};\n\n"); fprintf(condensed, "#endif\n"); fclose(condensed); gInfos.reset(); gInfosCounts.reset(); gInfosTypeIDs.reset(); gUnknowns.reset(); gUnknownsCounts.reset(); }
bool DistributionList::XMLLoadSubItems(XNode *pNode, int iRestoreOptions) { boost::shared_ptr<DistributionListRecipients> pDistListRecipients = GetMembers(); return pDistListRecipients->XMLLoad(pNode, iRestoreOptions); }