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