/** Delete user-defined time zones. @SYMTestCaseID PIM-APPSERV-TZS-CO-0003 @SYMTestCaseDesc The purpose of this test is to verify that user-defined time zones can be deleted. @SYMTestActions 1. Get all existing user-defined time zones. 2. Delete the user-defined time zone as the last element in the array one by one. 3. Try to read the user-defined time zone deleted in action 2. @SYMTestExpectedResults The user-defined time zone does not exist. @SYMTestType CT @SYMTestPriority 1 */ void CTzUserDataTest::TestDeleteUserDefinedTzL() { test.Next(_L("@SYMTestCaseID PIM-APPSERV-TZS-CO-0003")); RPointerArray<CTzId> ids; CleanupStack::PushL(TCleanupItem(ResetAndDestroyTzIdArray, &ids)); for(TInt ii=iTzIds.Count()-1; ii>=0; --ii) { iUserData->GetTzIdsL(ids); // The array obtained should be same as expected who elements is deleted // one by one in each loop. CompareArray(ids,iTzIds); ids.ResetAndDestroy(); // Delete the user-defined time zone as the last element in the array. iUserData->DeleteL(*(iTzIds[ii])); // The rule and names of the last element in the array should not be // found since it has been deleted. TRAPD(err, iUserData->ReadRulesL(*(iTzIds[ii]))); test(err == KErrNotFound); TRAP(err, iUserData->ReadNamesL(*(iTzIds[ii]))); test(err == KErrNotFound); delete iTzIds[ii]; iTzIds.Remove(ii); } CleanupStack::PopAndDestroy(&ids); }
int ValueArray::Compare(const ValueArray& b) const { return CompareArray(data->data, b.data->data); }
int ValueArray::Data::Compare(const Value::Void *p) { return CompareArray(data, ((Data *)p)->data); }
void SubdivUserData::Populate(MObject mesh) { MStatus s; MFnMesh meshFn(mesh); MIntArray vertexCount, vertexList; meshFn.getVertices(vertexCount, vertexList); MUintArray edgeIds; MDoubleArray edgeCreaseData; meshFn.getCreaseEdges(edgeIds, edgeCreaseData); MUintArray vtxIds; MDoubleArray vtxCreaseData; meshFn.getCreaseVertices(vtxIds, vtxCreaseData ); short level = 1; FindAttribute(meshFn, "smoothLevel", &level); if(level < 1) level = 1; short interpBoundary = 0; FindAttribute(meshFn, "boundaryRule", &interpBoundary); if(CompareArray(_vertexList, vertexList) && CompareArray(_edgeIds, edgeIds) && CompareArray(_edgeCreaseData, edgeCreaseData) && CompareArray(_vtxIds, vtxIds) && CompareArray(_vtxCreaseData, vtxCreaseData) && _level == level && _interpBoundary == interpBoundary) { return; } // update topology _vertexList = vertexList; _edgeIds = edgeIds; _edgeCreaseData = edgeCreaseData; _vtxIds = vtxIds; _vtxCreaseData = vtxCreaseData; _level = level; _interpBoundary = interpBoundary; if(_loop){ MIntArray triangleCounts; meshFn.getTriangles(triangleCounts, vertexList); int numTriangles = vertexList.length()/3; vertexCount.clear(); for(int i = 0; i < numTriangles; ++i){ vertexCount.append(3); } } // XXX redundant copy... replace _vertexList with numIndices, etc // create Osd mesh std::vector<int> numIndices, faceIndices, edgeCreaseIndices, vtxCreaseIndices; std::vector<float> edgeCreases, vtxCreases; numIndices.resize(vertexCount.length()); faceIndices.resize(vertexList.length()); for(int i = 0; i < (int)vertexCount.length(); ++i) numIndices[i] = vertexCount[i]; for(int i = 0; i < (int)vertexList.length(); ++i) faceIndices[i] = vertexList[i]; vtxCreaseIndices.resize(vtxIds.length()); for(int i = 0; i < (int)vtxIds.length(); ++i) vtxCreaseIndices[i] = vtxIds[i]; vtxCreases.resize(vtxCreaseData.length()); for(int i = 0; i < (int)vtxCreaseData.length(); ++i) vtxCreases[i] = (float)vtxCreaseData[i]; edgeCreases.resize(edgeCreaseData.length()); for(int i = 0; i < (int)edgeCreaseData.length(); ++i) edgeCreases[i] = (float)edgeCreaseData[i]; // edge crease index is stored as pair of <face id> <edge localid> ... int nEdgeIds = edgeIds.length(); edgeCreaseIndices.resize(nEdgeIds*2); for(int i = 0; i < nEdgeIds; ++i){ int2 vertices; if (meshFn.getEdgeVertices(edgeIds[i], vertices) != MS::kSuccess) { s.perror("ERROR can't get creased edge vertices"); continue; } edgeCreaseIndices[i*2] = vertices[0]; edgeCreaseIndices[i*2+1] = vertices[1]; } OpenSubdiv::OsdHbrMesh *hbrMesh = ConvertToHBR(meshFn.numVertices(), numIndices, faceIndices, vtxCreaseIndices, vtxCreases, std::vector<int>(), std::vector<float>(), edgeCreaseIndices, edgeCreases, interpBoundary, _loop); int kernel = OpenSubdiv::OsdKernelDispatcher::kCPU; if (OpenSubdiv::OsdKernelDispatcher::HasKernelType(OpenSubdiv::OsdKernelDispatcher::kOPENMP)) { kernel = OpenSubdiv::OsdKernelDispatcher::kOPENMP; } _osdmesh->Create(hbrMesh, level, kernel); delete hbrMesh; // create vertex buffer if (_vertexBuffer) { delete _vertexBuffer; } _vertexBuffer = _osdmesh->InitializeVertexBuffer(6 /* position + normal */); // create element array buffer if (_elementArrayBuffer) delete _elementArrayBuffer; _elementArrayBuffer = _osdmesh->CreateElementArrayBuffer(level); _cachedTotal = -1; UpdatePoints(mesh); }