1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
|
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
/*************************************************************************
*
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* Copyright 2000, 2010 Oracle and/or its affiliates.
*
* OpenOffice.org - a multi-platform office productivity suite
*
* This file is part of OpenOffice.org.
*
* OpenOffice.org is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License version 3
* only, as published by the Free Software Foundation.
*
* OpenOffice.org is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Lesser General Public License version 3 for more details
* (a copy is included in the LICENSE file that accompanied this code).
*
* You should have received a copy of the GNU Lesser General Public License
* version 3 along with OpenOffice.org. If not, see
* <http://www.openoffice.org/license.html>
* for a copy of the LGPLv3 License.
*
************************************************************************/
#ifndef _DXFGRPRD_HXX
#define _DXFGRPRD_HXX
#include <svtools/fltcall.hxx>
#define DXF_MAX_STRING_LEN 256 // Max Stringlaenge (ohne die 0)
class DXFGroupReader
{
public:
// Anmerkkung:
// sizeof(DXFGroupReader) ist gross, also nur dynamisch anlegen!
DXFGroupReader( SvStream & rIStream, sal_uInt16 nMinPercent, sal_uInt16 nMaxPercent );
sal_Bool GetStatus() const;
void SetError();
sal_uInt16 Read();
// Liesst die naechste Gruppe ein und liefert den Gruppencode zurueck.
// Im Falle eines Fehlers liefert GetStatus() sal_False, Gruppencode wird 0
// gesetzt, und es wird SetS(0,"EOF") ausgefuehrt.
sal_uInt16 GetG() const;
// Liefert den letzten Gruppencode (also was Read() zuletzt lieferte)
long GetI() const;
// Liefert den Integer-Wert zur Gruppe, die vorher mit Read() gelesen wurde.
// Dabei muss es sich um einen Gruppencode fuer den Datentyp Integer
// gehandelt haben, wenn nicht, wird 0 gelieferet.
double GetF() const;
// Liefert den Floatingpoint-Wert zur Gruppe, die vorher mit Read() gelesen wurde.
// Dabei muss es sich um einen Gruppencode fuer den Datentyp Floatingpoint
// gehandelt haben, wenn nicht, wird 0 geliefert.
const char * GetS() const;
// Liefert den String zur Gruppe, die vorher mit Read() gelesen wurde.
// Dabei muss es sich um einen Gruppencode fuer den Datentyp String
// gehandelt haben, wenn nicht, wird NULL geliefert.
// Folgende drei Methoden arbeiten wie die obigen, nur kann auch ein anderer als der
// aktuelle Gruppencode angegeben werden. (DXFGroupReader speichert die Parameter
// zu allen Gruppencodes. Dadurch ist es moeglich, dass zunaechst mit Read() einige
// verschiedene Gruppen eingelesen werden, bevor sie ausgewertet werden.)
long GetI(sal_uInt16 nG) const;
double GetF(sal_uInt16 nG) const;
const char * GetS(sal_uInt16 nG) const;
// Mit folgenden Methoden koennen die aktuell gespeicherten Werte zu den
// Gruppencodes veraendert werden. (z.B. um Defaultwerte zu setzen, bevor
// 'blind' eine Menge von Gruppen eingelesen wird.)
void SetF(sal_uInt16 nG, double fF);
void SetS(sal_uInt16 nG, const char * sS); // (wird kopiert)
private:
void ReadLine(char * ptgt);
long ReadI();
double ReadF();
void ReadS(char * ptgt);
SvStream & rIS;
sal_uInt16 nIBuffSize,nIBuffPos;
sal_Bool bStatus;
sal_uInt16 nLastG;
sal_uLong nGCount;
sal_uLong nMinPercent;
sal_uLong nMaxPercent;
sal_uLong nLastPercent;
sal_uLong nFileSize;
char S0_9 [10][DXF_MAX_STRING_LEN+1]; // Strings Gruppencodes 0..9
double F10_59 [50]; // Floats Gruppencodes 10..59
long I60_79 [20]; // Integers Gruppencodes 60..79
long I90_99 [10];
char S100 [DXF_MAX_STRING_LEN+1];
char S102 [DXF_MAX_STRING_LEN+1];
double F140_147 [ 8]; // Floats Gruppencodes 140..147
long I170_175 [ 6]; // Integers Gruppencodes 170..175
double F210_239 [30]; // Floats Gruppencodes 210..239
char S999_1009 [11][DXF_MAX_STRING_LEN+1]; // Strings Gruppencodes 999..1009
double F1010_1059[50]; // Floats Gruppencodes 1010..1059
long I1060_1079[20]; // Integers Gruppencodes 1060..1079
};
inline sal_Bool DXFGroupReader::GetStatus() const
{
return bStatus;
}
inline void DXFGroupReader::SetError()
{
bStatus=sal_False;
}
inline sal_uInt16 DXFGroupReader::GetG() const
{
return nLastG;
}
inline long DXFGroupReader::GetI() const
{
return GetI(nLastG);
}
inline double DXFGroupReader::GetF() const
{
return GetF(nLastG);
}
inline const char * DXFGroupReader::GetS() const
{
return GetS(nLastG);
}
#endif
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|