Пример #1
0
// 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;
}
Пример #2
0
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;
}