Main Page
Related Pages
Modules
Namespaces
Classes
Files
File List
File Members
opt
build
coinutils
coinutils-2.6.4
CoinUtils
src
CoinMessageHandler.hpp
Go to the documentation of this file.
1
/* $Id: CoinMessageHandler.hpp 1239 2009-12-10 16:16:11Z ladanyi $ */
2
// Copyright (C) 2002, International Business Machines
3
// Corporation and others. All Rights Reserved.
4
#ifndef CoinMessageHandler_H
5
#define CoinMessageHandler_H
6
7
#if defined(_MSC_VER)
8
// Turn off compiler warning about long names
9
# pragma warning(disable:4786)
10
#endif
11
12
13
#include <iostream>
14
#include <cstdio>
15
#include <string>
16
#include <vector>
17
#include "
CoinFinite.hpp
"
18
33
/*
34
I (jjf) am strongly in favo(u)r of language support for an open
35
source project, but I have tried to make it as lightweight as
36
possible in the sense that only a subset of messages need to be
37
defined - the rest default to US English. There will be different
38
sets of messages for each component - so at present there is a
39
Clp component and a Coin component.
40
41
Because messages are only used in a controlled environment and have no
42
impact on code and are tested by other tests I have include tests such
43
as language and derivation in other unit tests.
44
*/
45
56
class
CoinOneMessage
{
57
58
public
:
62
CoinOneMessage
();
64
CoinOneMessage
(
int
externalNumber
,
char
detail
,
65
const
char
*
message
);
67
~CoinOneMessage
();
69
CoinOneMessage
(
const
CoinOneMessage
&);
71
CoinOneMessage
&
operator=
(
const
CoinOneMessage
&);
73
76
void
replaceMessage
(
const
char
* message);
79
83
inline
int
externalNumber
()
const
84
{
return
externalNumber_
;}
90
inline
void
setExternalNumber
(
int
number)
91
{
externalNumber_
=number;}
93
inline
char
severity
()
const
94
{
return
severity_
;}
96
inline
void
setDetail
(
int
level)
97
{
detail_
=
static_cast<
char
>
(level);}
99
inline
int
detail
()
const
100
{
return
detail_
;}
102
inline
char
*
message
()
const
103
{
return
message_
;}
105
108
int
externalNumber_
;
111
char
detail_
;
113
char
severity_
;
115
mutable
char
message_
[400];
117
};
118
126
class
CoinMessages
{
127
128
public
:
134
enum
Language
{
135
us_en
= 0,
136
uk_en
,
137
it
138
};
139
143
CoinMessages
(
int
numberMessages=0);
145
~CoinMessages
();
147
CoinMessages
(
const
CoinMessages
&);
149
CoinMessages
&
operator=
(
const
CoinMessages
&);
151
159
void
addMessage
(
int
messageNumber,
const
CoinOneMessage
& message);
165
void
replaceMessage
(
int
messageNumber,
const
char
* message);
167
inline
Language
language
()
const
168
{
return
language_
;}
170
void
setLanguage
(
Language
newlanguage)
171
{
language_
= newlanguage;}
173
void
setDetailMessage
(
int
newLevel,
int
messageNumber);
181
void
setDetailMessages
(
int
newLevel,
int
numberMessages,
182
int
* messageNumbers);
184
void
setDetailMessages
(
int
newLevel,
int
low,
int
high);
186
inline
int
getClass
()
const
187
{
return
class_
;}
189
void
toCompact
();
191
void
fromCompact
();
193
196
int
numberMessages_
;
199
Language
language_
;
201
char
source_
[5];
203
int
class_
;
207
int
lengthMessages_
;
209
CoinOneMessage
**
message_
;
211
};
212
213
// for convenience eol
214
enum
CoinMessageMarker
{
215
CoinMessageEol
= 0,
216
CoinMessageNewline
= 1
217
};
218
310
/*
311
Where there are derived classes I (jjf) have started message numbers at 1001.
312
*/
313
314
class
CoinMessageHandler
{
315
316
friend
bool
CoinMessageHandlerUnitTest
() ;
317
318
private
:
320
void
gutsOfCopy
(
const
CoinMessageHandler
& rhs);
321
322
public
:
327
virtual
int
print
() ;
330
virtual
void
checkSeverity
() ;
332
335
CoinMessageHandler
();
338
CoinMessageHandler
(FILE *fp);
340
virtual
~CoinMessageHandler
();
342
CoinMessageHandler
(
const
CoinMessageHandler
&);
344
CoinMessageHandler
&
operator=
(
const
CoinMessageHandler
&);
346
virtual
CoinMessageHandler
*
clone
()
const
;
348
350
inline
int
detail
(
int
messageNumber,
const
CoinMessages
&normalMessage)
const
352
{
return
normalMessage.
message_
[messageNumber]->
detail
();}
354
inline
int
logLevel
()
const
355
{
return
logLevel_
;}
373
void
setLogLevel
(
int
value);
375
inline
int
logLevel
(
int
which)
const
376
{
return
logLevels_
[which];}
381
void
setLogLevel
(
int
which,
int
value);
383
void
setPrefix
(
bool
yesNo);
385
bool
prefix
()
const
;
391
inline
double
doubleValue
(
int
position)
const
392
{
return
doubleValue_
[position];}
397
inline
int
numberDoubleFields
()
const
398
{
return
static_cast<
int
>
(
doubleValue_
.size());}
404
inline
int
intValue
(
int
position)
const
405
{
return
longValue_
[position];}
410
inline
int
numberIntFields
()
const
411
{
return
static_cast<
int
>
(
longValue_
.size());}
417
inline
char
charValue
(
int
position)
const
418
{
return
charValue_
[position];}
423
inline
int
numberCharFields
()
const
424
{
return
static_cast<
int
>
(
charValue_
.size());}
430
inline
std::string
stringValue
(
int
position)
const
431
{
return
stringValue_
[position];}
436
inline
int
numberStringFields
()
const
437
{
return
static_cast<
int
>
(
stringValue_
.size());}
438
440
inline
CoinOneMessage
currentMessage
()
const
441
{
return
currentMessage_
;}
443
inline
std::string
currentSource
()
const
444
{
return
source_
;}
446
inline
const
char
*
messageBuffer
()
const
447
{
return
messageBuffer_
;}
449
inline
int
highestNumber
()
const
450
{
return
highestNumber_
;}
452
inline
FILE *
filePointer
()
const
453
{
return
fp_
;}
455
inline
void
setFilePointer
(FILE * fp)
456
{
fp_
= fp;}
458
467
CoinMessageHandler
&
message
(
int
messageNumber,
468
const
CoinMessages
& messages);
476
CoinMessageHandler
&
message
();
483
CoinMessageHandler
&
message
(
int
externalNumber,
const
char
* header,
484
const
char
* msg,
char
severity);
489
CoinMessageHandler
&
operator<<
(
int
intvalue);
490
#if COIN_BIG_INDEX==1
491
495
CoinMessageHandler
&
operator<<
(
long
longvalue);
496
#endif
497
#if COIN_BIG_INDEX==2
498
502
CoinMessageHandler
&
operator<<
(
long
long
longvalue);
503
#endif
504
508
CoinMessageHandler
&
operator<<
(
double
doublevalue);
513
CoinMessageHandler
&
operator<<
(
const
std::string& stringvalue);
518
CoinMessageHandler
&
operator<<
(
char
charvalue);
523
CoinMessageHandler
&
operator<<
(
const
char
*stringvalue);
528
CoinMessageHandler
&
operator<<
(
CoinMessageMarker
);
533
int
finish
();
543
CoinMessageHandler
&
printing
(
bool
onOff);
544
549
char
*
nextPerCent
(
char
* start ,
const
bool
initial=
false
);
554
int
internalPrint
();
556
566
#define COIN_NUM_LOG 4
567
#define COIN_MESSAGE_HANDLER_MAX_BUFFER_SIZE 1000
568
protected
:
571
std::vector<double>
doubleValue_
;
573
std::vector<int>
longValue_
;
574
std::vector<char>
charValue_
;
575
std::vector<std::string>
stringValue_
;
577
int
logLevel_
;
579
int
logLevels_
[
COIN_NUM_LOG
];
581
int
prefix_
;
583
CoinOneMessage
currentMessage_
;
585
int
internalNumber_
;
587
char
*
format_
;
589
char
messageBuffer_
[
COIN_MESSAGE_HANDLER_MAX_BUFFER_SIZE
];
591
char
*
messageOut_
;
593
std::string
source_
;
599
int
printStatus_
;
601
int
highestNumber_
;
603
FILE *
fp_
;
605
};
606
607
//#############################################################################
613
bool
614
CoinMessageHandlerUnitTest
();
615
616
#endif
Generated on Tue Mar 1 2016 22:31:56 by
1.8.4