// TODO improve performances sorting // fList's objects by type BContactField* BContact::FieldByType(field_type type, int32 index) { if (fInitCheck != B_OK) return NULL; int32 count = CountFields(); int32 fieldsCount = 0; for (int i = 0; i < count; i++) { BContactField* ret = fList.ItemAt(count); if (ret->TypeCode() == type) { fieldsCount++; if (fieldsCount == index) return ret; } } return NULL; }
status_t BContact::_FlattenFields(BMessage* msg) const { int count = fList.CountItems(); status_t ret; for (int i = 0; i < count; i++) { BContactField* object = fList.ItemAt(i); ssize_t size = object->FlattenedSize(); void* buffer = new char[size]; MemoryDeleter deleter(buffer); if (buffer == NULL) return B_NO_MEMORY; ret = object->Flatten(buffer, size); ret = msg->AddData(CONTACT_FIELD_IDENT, object->TypeCode(), buffer, size, false); if (ret != B_OK) return ret; } return B_OK; }