1
0
mirror of https://git.dev.opencascade.org/repos/occt.git synced 2025-09-08 14:17:06 +03:00

Exception based error handling

This commit is contained in:
duv
2016-03-09 12:54:36 +03:00
parent a83f359622
commit ee7da3c228
2 changed files with 37 additions and 8 deletions

View File

@@ -18,6 +18,7 @@
#pragma warning (disable: 4127) #pragma warning (disable: 4127)
#include <stdio.h> #include <stdio.h>
#include <stdexcept>
#include <BRepMesh_MinStCut.hxx> #include <BRepMesh_MinStCut.hxx>
Graph::Graph (void (*theErrFun) (char*)) Graph::Graph (void (*theErrFun) (char*))
@@ -62,7 +63,10 @@ Graph::NodeId Graph::AddNode()
NodeBlock* next = myNodeBlockFirst; NodeBlock* next = myNodeBlockFirst;
myNodeBlockFirst = (NodeBlock*) new NodeBlock; 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->Current = & (myNodeBlockFirst->Nodes[0]);
myNodeBlockFirst->Next = next; myNodeBlockFirst->Next = next;
@@ -87,7 +91,10 @@ void Graph::AddEdge (NodeId theFromNode, NodeId theToNode, CapacityType theCapac
ArcForBlock* aNext = myArcForBlockFirst; ArcForBlock* aNext = myArcForBlockFirst;
char* aPtr = new char[sizeof (ArcForBlock) +1]; 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); } if ( (int) aPtr & 1) { myArcForBlockFirst = (ArcForBlock*) (aPtr + 1); }
else { myArcForBlockFirst = (ArcForBlock*) aPtr; } else { myArcForBlockFirst = (ArcForBlock*) aPtr; }
@@ -102,7 +109,10 @@ void Graph::AddEdge (NodeId theFromNode, NodeId theToNode, CapacityType theCapac
ArcRevBlock* aNext = myArcREvBlockFirst; ArcRevBlock* aNext = myArcREvBlockFirst;
char* aPter = new char[sizeof (ArcRevBlock) +1]; 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); } if ( (int) aPter & 1) { myArcREvBlockFirst = (ArcRevBlock*) (aPter + 1); }
else { myArcREvBlockFirst = (ArcRevBlock*) aPter; } else { myArcREvBlockFirst = (ArcRevBlock*) aPter; }
@@ -182,7 +192,10 @@ void Graph::prepareGraph()
if (anArcFor + aK > &anArcBlockFor->ArcsFor[ARC_BLOCK_SIZE]) 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; } if (aForwardFlag) { anArcBlockFor = NULL; }
else { anArcBlockFor = anArcBlockFor->Next; anArcBlockREvScan = anArcBlockREvScan->Next; } else { anArcBlockFor = anArcBlockFor->Next; anArcBlockREvScan = anArcBlockREvScan->Next; }
@@ -192,7 +205,10 @@ void Graph::prepareGraph()
ArcForBlock* next = myArcForBlockFirst; ArcForBlock* next = myArcForBlockFirst;
char* ptr = new char[sizeof (ArcForBlock) +1]; 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); } if ( (int) ptr & 1) { myArcForBlockFirst = (ArcForBlock*) (ptr + 1); }
else { myArcForBlockFirst = (ArcForBlock*) ptr; } else { myArcForBlockFirst = (ArcForBlock*) ptr; }
@@ -224,7 +240,10 @@ void Graph::prepareGraph()
if (anArcRev + aK > &anArcBlockRev->ArcsRev[ARC_BLOCK_SIZE]) 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; } if (aReverseFlag) { anArcBlockRev = NULL; }
else { anArcBlockRev = anArcBlockRev->Next; } else { anArcBlockRev = anArcBlockRev->Next; }
@@ -234,7 +253,10 @@ void Graph::prepareGraph()
ArcRevBlock* next = myArcREvBlockFirst; ArcRevBlock* next = myArcREvBlockFirst;
char* ptr = new char[sizeof (ArcRevBlock) +1]; 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); } if ( (int) ptr & 1) { myArcREvBlockFirst = (ArcRevBlock*) (ptr + 1); }
else { myArcREvBlockFirst = (ArcRevBlock*) ptr; } else { myArcREvBlockFirst = (ArcRevBlock*) ptr; }

View File

@@ -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) for (Standard_Size i = 0; i < myPatches.size(); ++i)
{ {