Пример #1
0
BContactField*
BContactField::Duplicate(BContactField* from)
{
	BContactField* child = NULL;
	type_code childType = from->FieldType();
	ObjectDeleter<BContactField> deleter;

	switch (childType) {
		case B_CONTACT_NAME:
		case B_CONTACT_NICKNAME:
		case B_CONTACT_EMAIL:
		case B_CONTACT_NOTE:
		case B_CONTACT_ORGANIZATION:
		case B_CONTACT_IM:
		case B_CONTACT_URL:
		case B_CONTACT_PHONE:
			child = new BStringContactField(childType);
			break;
		case B_CONTACT_ADDRESS:
			child = new BAddressContactField();
			break;
		case B_CONTACT_PHOTO:
			child = new BPhotoContactField();
			break;
	}

	if (child != NULL && child->CopyDataFrom(from) == B_OK)
		return child;

	deleter.SetTo(child);
	return NULL;
}
BContactField*
BContactField::Duplicate(BContactField* from)
{
	BContactField* child = NULL;
	type_code childType = from->FieldType();
	ObjectDeleter<BContactField> deleter;

	child = BContactField::InstantiateChildClass(childType);

	if (child != NULL && child->CopyDataFrom(from) == B_OK)
		return child;

	deleter.SetTo(child);
	return NULL;
}