Merge of itasc branch. Project files, scons and cmake should be working. Makefile...
[blender.git] / intern / itasc / kdl / utilities / error_stack.cpp
1 /*****************************************************************************
2  *  \author 
3  *      Erwin Aertbelien, Div. PMA, Dep. of Mech. Eng., K.U.Leuven
4  *
5  *  \version 
6  *              ORO_Geometry V0.2
7  *
8  *      \par History
9  *              - $log$
10  *
11  *      \par Release
12  *              $Id: error_stack.cpp 19905 2009-04-23 13:29:54Z ben2610 $
13  *              $Name:  $ 
14  ****************************************************************************/
15
16
17 #include "error_stack.h"
18 #include <stack>
19 #include <vector>
20 #include <string>
21 #include <cstring>
22
23 namespace KDL {
24
25 // Trace of the call stack of the I/O routines to help user
26 // interprete error messages from I/O
27 typedef std::stack<std::string>  ErrorStack;
28
29 ErrorStack errorstack;
30 // should be in Thread Local Storage if this gets multithreaded one day...
31
32
33 void IOTrace(const std::string& description) {
34     errorstack.push(description);   
35 }
36
37
38 void IOTracePop() {
39     errorstack.pop();
40 }
41
42 void IOTraceOutput(std::ostream& os) {
43     while (!errorstack.empty()) {
44         os << errorstack.top().c_str() << std::endl;
45         errorstack.pop();
46     }
47 }
48
49
50 void IOTracePopStr(char* buffer,int size) {
51     if (errorstack.empty()) {
52         *buffer = 0;
53         return;
54     }
55     strncpy(buffer,errorstack.top().c_str(),size);
56     errorstack.pop();
57 }
58
59 }