From: duv Date: Wed, 9 Mar 2016 09:54:36 +0000 (+0300) Subject: Exception based error handling X-Git-Url: http://git.dev.opencascade.org/gitweb/?a=commitdiff_plain;h=ee7da3c22855f3bbf7f7b8098947ba436421baa4;p=occt-copy.git Exception based error handling --- diff --git a/src/BRepMesh/BRepMesh_MinStCut.cxx b/src/BRepMesh/BRepMesh_MinStCut.cxx index b2ef61f0af..0435080179 100644 --- a/src/BRepMesh/BRepMesh_MinStCut.cxx +++ b/src/BRepMesh/BRepMesh_MinStCut.cxx @@ -18,6 +18,7 @@ #pragma warning (disable: 4127) #include +#include #include Graph::Graph (void (*theErrFun) (char*)) @@ -62,7 +63,10 @@ Graph::NodeId Graph::AddNode() NodeBlock* next = myNodeBlockFirst; myNodeBlockFirst = (NodeBlock*) new NodeBlock; - if (!myNodeBlockFirst) { if (myErrorFun) { (*myErrorFun) ("Not enough memory!"); } exit (1); } + if (!myNodeBlockFirst) + { + throw std::runtime_error ("Not enough memory!"); + } myNodeBlockFirst->Current = & (myNodeBlockFirst->Nodes[0]); myNodeBlockFirst->Next = next; @@ -87,7 +91,10 @@ void Graph::AddEdge (NodeId theFromNode, NodeId theToNode, CapacityType theCapac ArcForBlock* aNext = myArcForBlockFirst; char* aPtr = new char[sizeof (ArcForBlock) +1]; - if (!aPtr) { if (myErrorFun) { (*myErrorFun) ("Not enough memory!"); } exit (1); } + if (!aPtr) + { + throw std::runtime_error ("Not enough memory!"); + } if ( (int) aPtr & 1) { myArcForBlockFirst = (ArcForBlock*) (aPtr + 1); } else { myArcForBlockFirst = (ArcForBlock*) aPtr; } @@ -102,7 +109,10 @@ void Graph::AddEdge (NodeId theFromNode, NodeId theToNode, CapacityType theCapac ArcRevBlock* aNext = myArcREvBlockFirst; char* aPter = new char[sizeof (ArcRevBlock) +1]; - if (!aPter) { if (myErrorFun) { (*myErrorFun) ("Not enough memory!"); } exit (1); } + if (!aPter) + { + throw std::runtime_error ("Not enough memory!"); + } if ( (int) aPter & 1) { myArcREvBlockFirst = (ArcRevBlock*) (aPter + 1); } else { myArcREvBlockFirst = (ArcRevBlock*) aPter; } @@ -182,7 +192,10 @@ void Graph::prepareGraph() if (anArcFor + aK > &anArcBlockFor->ArcsFor[ARC_BLOCK_SIZE]) { - if (aK > ARC_BLOCK_SIZE) { if (myErrorFun) { (*myErrorFun) ("# of arcs per node exceeds block size!"); } exit (1); } + if (aK > ARC_BLOCK_SIZE) + { + throw std::runtime_error ("# of arcs per node exceeds block size!"); + } if (aForwardFlag) { anArcBlockFor = NULL; } else { anArcBlockFor = anArcBlockFor->Next; anArcBlockREvScan = anArcBlockREvScan->Next; } @@ -192,7 +205,10 @@ void Graph::prepareGraph() ArcForBlock* next = myArcForBlockFirst; char* ptr = new char[sizeof (ArcForBlock) +1]; - if (!ptr) { if (myErrorFun) { (*myErrorFun) ("Not enough memory!"); } exit (1); } + if (!ptr) + { + throw std::runtime_error ("Not enough memory!"); + } if ( (int) ptr & 1) { myArcForBlockFirst = (ArcForBlock*) (ptr + 1); } else { myArcForBlockFirst = (ArcForBlock*) ptr; } @@ -224,7 +240,10 @@ void Graph::prepareGraph() if (anArcRev + aK > &anArcBlockRev->ArcsRev[ARC_BLOCK_SIZE]) { - if (aK > ARC_BLOCK_SIZE) { if (myErrorFun) { (*myErrorFun) ("# of arcs per node exceeds block size!"); } exit (1); } + if (aK > ARC_BLOCK_SIZE) + { + throw std::runtime_error ("# of arcs per node exceeds block size!"); + } if (aReverseFlag) { anArcBlockRev = NULL; } else { anArcBlockRev = anArcBlockRev->Next; } @@ -234,7 +253,10 @@ void Graph::prepareGraph() ArcRevBlock* next = myArcREvBlockFirst; char* ptr = new char[sizeof (ArcRevBlock) +1]; - if (!ptr) { if (myErrorFun) { (*myErrorFun) ("Not enough memory!"); } exit (1); } + if (!ptr) + { + throw std::runtime_error ("Not enough memory!"); + } if ( (int) ptr & 1) { myArcREvBlockFirst = (ArcRevBlock*) (ptr + 1); } else { myArcREvBlockFirst = (ArcRevBlock*) ptr; } diff --git a/src/BRepMesh/BRepMesh_RestoreOrientationTool.cxx b/src/BRepMesh/BRepMesh_RestoreOrientationTool.cxx index 0866fa41dc..996da0bc3a 100644 --- a/src/BRepMesh/BRepMesh_RestoreOrientationTool.cxx +++ b/src/BRepMesh/BRepMesh_RestoreOrientationTool.cxx @@ -835,7 +835,14 @@ void BRepMesh_RestoreOrientationTool::Perform() } } - aGraph->Minimize(); + try + { + aGraph->Minimize(); + } + catch (std::exception& theError) + { + std::cout << theError.what() << std::endl; + } for (Standard_Size i = 0; i < myPatches.size(); ++i) {