Free cookie consent management tool by TermsFeed Policy Generator

source: branches/HeuristicLab.Analysis.AlgorithmBehavior/qhull-2012.1/src/libqhullcpp/RoadLogEvent.cpp @ 10207

Last change on this file since 10207 was 10207, checked in by ascheibe, 11 years ago

#1886 added a unit test for volume calculation and the qhull library

File size: 3.2 KB
Line 
1/****************************************************************************
2**
3** Copyright (c) 2008-2012 C.B. Barber. All rights reserved.
4** $Id: //main/2011/qhull/src/libqhullcpp/RoadLogEvent.cpp#1 $$Change: 1490 $
5** $Date: 2012/02/19 $$Author: bbarber $
6**
7****************************************************************************/
8
9#//! RoadError -- All exceptions thrown by Qhull are RoadErrors
10
11#include "RoadError.h"
12
13#include <string>
14#include <sstream>
15#include <iostream>
16
17using std::cout;
18using std::endl;
19using std::ostringstream;
20using std::string;
21
22#ifdef _MSC_VER  // Microsoft Visual C++ -- warning level 4
23#endif
24
25namespace orgQhull {
26
27#//!\name Conversion
28string RoadLogEvent::
29toString(const char *tag, int code) const
30{
31    ostringstream os;
32    if(tag && code){
33        os << tag << code;
34        if(format_string){
35            os << " ";
36        }
37    }
38    if(!format_string){
39        return os.str();
40    }
41    const char *s= format_string;
42    int dCount= 0;  // Count of %d
43    int fCount= 0;  // Count of %f
44    char extraCode= '\0';
45    while(*s){
46        if(*s!='%'){
47            os << *s++;
48        }else{
49            char c= *++s;
50            s++;
51            switch(c){
52            case 'd':
53                if(++dCount>2){
54                    os << " ERROR_three_%d_in_format ";
55                }else if(dCount==2){
56                    os << int_2;
57                }else{
58                    os << int_1;
59                }
60                break;
61            case 'e':
62                if(firstExtraCode(os, c, &extraCode)){
63                    os << double_1;
64                }
65                break;
66            case 'f':
67                if(++fCount>1){
68                    os << " ERROR_two_%f_in_format ";
69                }else{
70                    os << float_1;
71                }
72                break;
73            case 'i':
74                if(firstExtraCode(os, c, &extraCode)){
75                    os << int64_1;
76                }
77                break;
78            case 's':
79                if(firstExtraCode(os, c, &extraCode)){
80                    os << cstr_1;
81                }
82                break;
83            case 'u':
84                if(firstExtraCode(os, c, &extraCode)){
85                    os << "0x" << std::hex << int64_1 << std::dec;
86                }
87                break;
88            case 'x':
89                if(firstExtraCode(os, c, &extraCode)){
90                    os << void_1;
91                }
92                break;
93            case '%':
94                os << c;
95                break;
96            default:
97                os << " ERROR_%" << c << "_not_defined_in_format";
98                break;
99            }
100        }
101    }
102    if(s[-1]!='\n'){
103        os << endl;
104    }
105    return os.str();
106}//toString
107
108#//Class helpers (static)
109
110//! True if this char is the first extra code
111bool RoadLogEvent::
112firstExtraCode(std::ostream &os, char c, char *extraCode){
113    if(*extraCode){
114        os << " ERROR_%" << *extraCode << "_and_%" << c << "_in_format ";
115        return false;
116    }
117    *extraCode= c;
118    return true;
119}//firstExtraCode
120
121}//namespace orgQhull
122
Note: See TracBrowser for help on using the repository browser.