CoinUtils
2.9.0
Main Page
Related Pages
Modules
Namespaces
Classes
Files
File List
File Members
All
Classes
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Friends
Macros
Groups
Pages
CoinUtils
src
CoinMessageHandler.hpp
Go to the documentation of this file.
1
/* $Id: CoinMessageHandler.hpp 1514 2011-12-10 23:35:23Z lou $ */
2
// Copyright (C) 2002, International Business Machines
3
// Corporation and others. All Rights Reserved.
4
// This code is licensed under the terms of the Eclipse Public License (EPL).
5
6
#ifndef CoinMessageHandler_H
7
#define CoinMessageHandler_H
8
9
#include "
CoinUtilsConfig.h
"
10
#include "
CoinPragma.hpp
"
11
12
#include <iostream>
13
#include <cstdio>
14
#include <string>
15
#include <vector>
16
31
/*
32
I (jjf) am strongly in favo(u)r of language support for an open
33
source project, but I have tried to make it as lightweight as
34
possible in the sense that only a subset of messages need to be
35
defined - the rest default to US English. There will be different
36
sets of messages for each component - so at present there is a
37
Clp component and a Coin component.
38
39
Because messages are only used in a controlled environment and have no
40
impact on code and are tested by other tests I have included tests such
41
as language and derivation in other unit tests.
42
*/
43
/*
44
Where there are derived classes I (jjf) have started message numbers at 1001.
45
*/
46
47
58
class
CoinOneMessage
{
59
60
public
:
64
CoinOneMessage
();
66
CoinOneMessage
(
int
externalNumber
,
char
detail
,
67
const
char
*
message
);
69
~CoinOneMessage
();
71
CoinOneMessage
(
const
CoinOneMessage
&);
73
CoinOneMessage
&
operator=
(
const
CoinOneMessage
&);
75
78
void
replaceMessage
(
const
char
* message);
81
85
inline
int
externalNumber
()
const
86
{
return
externalNumber_
;}
92
inline
void
setExternalNumber
(
int
number)
93
{
externalNumber_
=number;}
95
inline
char
severity
()
const
96
{
return
severity_
;}
98
inline
void
setDetail
(
int
level)
99
{
detail_
=
static_cast<
char
>
(level);}
101
inline
int
detail
()
const
102
{
return
detail_
;}
104
inline
char
*
message
()
const
105
{
return
message_
;}
107
110
int
externalNumber_
;
113
char
detail_
;
115
char
severity_
;
117
mutable
char
message_
[400];
119
};
120
128
class
CoinMessages
{
129
130
public
:
136
enum
Language
{
137
us_en
= 0,
138
uk_en
,
139
it
140
};
141
145
CoinMessages
(
int
numberMessages=0);
147
~CoinMessages
();
149
CoinMessages
(
const
CoinMessages
&);
151
CoinMessages
&
operator=
(
const
CoinMessages
&);
153
161
void
addMessage
(
int
messageNumber,
const
CoinOneMessage
& message);
167
void
replaceMessage
(
int
messageNumber,
const
char
* message);
169
inline
Language
language
()
const
170
{
return
language_
;}
172
void
setLanguage
(
Language
newlanguage)
173
{
language_
= newlanguage;}
175
void
setDetailMessage
(
int
newLevel,
int
messageNumber);
183
void
setDetailMessages
(
int
newLevel,
int
numberMessages,
184
int
* messageNumbers);
186
void
setDetailMessages
(
int
newLevel,
int
low,
int
high);
187
189
inline
int
getClass
()
const
190
{
return
class_
;}
192
void
toCompact
();
194
void
fromCompact
();
196
199
int
numberMessages_
;
202
Language
language_
;
204
char
source_
[5];
206
int
class_
;
210
int
lengthMessages_
;
212
CoinOneMessage
**
message_
;
214
};
215
216
// for convenience eol
217
enum
CoinMessageMarker
{
218
CoinMessageEol
= 0,
219
CoinMessageNewline
= 1
220
};
221
327
class
CoinMessageHandler
{
328
329
friend
bool
CoinMessageHandlerUnitTest
() ;
330
331
public
:
336
virtual
int
print
() ;
339
virtual
void
checkSeverity
() ;
341
344
CoinMessageHandler
();
347
CoinMessageHandler
(FILE *fp);
349
virtual
~CoinMessageHandler
();
351
CoinMessageHandler
(
const
CoinMessageHandler
&);
353
CoinMessageHandler
&
operator=
(
const
CoinMessageHandler
&);
355
virtual
CoinMessageHandler
*
clone
()
const
;
357
359
inline
int
detail
(
int
messageNumber,
const
CoinMessages
&normalMessage)
const
361
{
return
normalMessage.
message_
[messageNumber]->
detail
();}
363
inline
int
logLevel
()
const
364
{
return
logLevel_
;}
382
void
setLogLevel
(
int
value);
384
inline
int
logLevel
(
int
which)
const
385
{
return
logLevels_
[which];}
390
void
setLogLevel
(
int
which,
int
value);
391
393
void
setPrecision
(
unsigned
int
new_precision);
395
inline
int
precision
() {
return
(
g_precision_
) ; }
396
398
void
setPrefix
(
bool
yesNo);
400
bool
prefix
()
const
;
406
inline
double
doubleValue
(
int
position)
const
407
{
return
doubleValue_
[position];}
412
inline
int
numberDoubleFields
()
const
413
{
return
static_cast<
int
>
(
doubleValue_
.size());}
419
inline
int
intValue
(
int
position)
const
420
{
return
longValue_
[position];}
425
inline
int
numberIntFields
()
const
426
{
return
static_cast<
int
>
(
longValue_
.size());}
432
inline
char
charValue
(
int
position)
const
433
{
return
charValue_
[position];}
438
inline
int
numberCharFields
()
const
439
{
return
static_cast<
int
>
(
charValue_
.size());}
445
inline
std::string
stringValue
(
int
position)
const
446
{
return
stringValue_
[position];}
451
inline
int
numberStringFields
()
const
452
{
return
static_cast<
int
>
(
stringValue_
.size());}
453
455
inline
CoinOneMessage
currentMessage
()
const
456
{
return
currentMessage_
;}
458
inline
std::string
currentSource
()
const
459
{
return
source_
;}
461
inline
const
char
*
messageBuffer
()
const
462
{
return
messageBuffer_
;}
464
inline
int
highestNumber
()
const
465
{
return
highestNumber_
;}
467
inline
FILE *
filePointer
()
const
468
{
return
fp_
;}
470
inline
void
setFilePointer
(FILE * fp)
471
{
fp_
= fp;}
473
482
CoinMessageHandler
&
message
(
int
messageNumber,
483
const
CoinMessages
&messages) ;
484
498
CoinMessageHandler
&
message
(
int
detail
= -1) ;
499
512
CoinMessageHandler
&
message
(
int
externalNumber,
const
char
*source,
513
const
char
*msg,
514
char
severity,
int
detail
= -1) ;
515
520
CoinMessageHandler
&
operator<<
(
int
intvalue);
521
#if COIN_BIG_INDEX==1
522
526
CoinMessageHandler
&
operator<<
(
long
longvalue);
527
#endif
528
#if COIN_BIG_INDEX==2
529
533
CoinMessageHandler
&
operator<<
(
long
long
longvalue);
534
#endif
535
539
CoinMessageHandler
&
operator<<
(
double
doublevalue);
544
CoinMessageHandler
&
operator<<
(
const
std::string& stringvalue);
549
CoinMessageHandler
&
operator<<
(
char
charvalue);
554
CoinMessageHandler
&
operator<<
(
const
char
*stringvalue);
559
CoinMessageHandler
&
operator<<
(
CoinMessageMarker
);
564
int
finish
();
574
CoinMessageHandler
&
printing
(
bool
onOff);
575
577
586
#define COIN_NUM_LOG 4
587
#define COIN_MESSAGE_HANDLER_MAX_BUFFER_SIZE 1000
589
protected
:
592
std::vector<double>
doubleValue_
;
594
std::vector<int>
longValue_
;
595
std::vector<char>
charValue_
;
596
std::vector<std::string>
stringValue_
;
598
int
logLevel_
;
600
int
logLevels_
[
COIN_NUM_LOG
];
602
int
prefix_
;
604
CoinOneMessage
currentMessage_
;
606
int
internalNumber_
;
608
char
*
format_
;
610
char
messageBuffer_
[
COIN_MESSAGE_HANDLER_MAX_BUFFER_SIZE
];
612
char
*
messageOut_
;
614
std::string
source_
;
623
int
printStatus_
;
625
int
highestNumber_
;
627
FILE *
fp_
;
629
char
g_format_
[8];
631
int
g_precision_
;
633
634
private
:
635
637
void
gutsOfCopy
(
const
CoinMessageHandler
&rhs) ;
638
643
char
*
nextPerCent
(
char
*start,
const
bool
initial =
false
) ;
644
649
int
internalPrint
() ;
650
652
void
calcPrintStatus
(
int
msglvl,
int
msgclass) ;
653
654
655
};
656
657
//#############################################################################
663
bool
664
CoinMessageHandlerUnitTest
();
665
666
#endif
Generated by
1.8.4