xref: /AOO41X/main/filter/source/graphicfilter/idxf/dxfgrprd.hxx (revision 22e87013b212da8c80c93e291ad90de8f36964c2)
1 /**************************************************************
2  *
3  * Licensed to the Apache Software Foundation (ASF) under one
4  * or more contributor license agreements.  See the NOTICE file
5  * distributed with this work for additional information
6  * regarding copyright ownership.  The ASF licenses this file
7  * to you under the Apache License, Version 2.0 (the
8  * "License"); you may not use this file except in compliance
9  * with the License.  You may obtain a copy of the License at
10  *
11  *   http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing,
14  * software distributed under the License is distributed on an
15  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16  * KIND, either express or implied.  See the License for the
17  * specific language governing permissions and limitations
18  * under the License.
19  *
20  *************************************************************/
21 
22 
23 
24 #ifndef _DXFGRPRD_HXX
25 #define _DXFGRPRD_HXX
26 
27 #include <svtools/fltcall.hxx>
28 
29 #define DXF_MAX_STRING_LEN 256 // Max Stringlaenge (ohne die 0)
30 
31 
32 class DXFGroupReader
33 {
34 
35 public:
36 
37     // Anmerkkung:
38     // sizeof(DXFGroupReader) ist gross, also nur dynamisch anlegen!
39 
40     DXFGroupReader( SvStream & rIStream, sal_uInt16 nMinPercent, sal_uInt16 nMaxPercent );
41 
42     sal_Bool GetStatus();
43 
44     void SetError();
45 
46     sal_uInt16 Read();
47         // Liesst die naechste Gruppe ein und liefert den Gruppencode zurueck.
48         // Im Falle eines Fehlers liefert GetStatus() sal_False, Gruppencode wird 0
49         // gesetzt, und es wird SetS(0,"EOF") ausgefuehrt.
50 
51     sal_uInt16 GetG();
52         // Liefert den letzten Gruppencode (also was Read() zuletzt lieferte)
53 
54     long   GetI();
55         // Liefert den Integer-Wert zur Gruppe, die vorher mit Read() gelesen wurde.
56         // Dabei muss es sich um einen Gruppencode fuer den Datentyp Integer
57         // gehandelt haben, wenn nicht, wird 0 gelieferet.
58 
59     double GetF();
60         // Liefert den Floatingpoint-Wert zur Gruppe, die vorher mit Read() gelesen wurde.
61         // Dabei muss es sich um einen Gruppencode fuer den Datentyp Floatingpoint
62         // gehandelt haben, wenn nicht, wird 0 geliefert.
63 
64     const char * GetS();
65         // Liefert den String zur Gruppe, die vorher mit Read() gelesen wurde.
66         // Dabei muss es sich um einen Gruppencode fuer den Datentyp String
67         // gehandelt haben, wenn nicht, wird NULL geliefert.
68 
69     // Folgende drei Methoden arbeiten wie die obigen, nur kann auch ein anderer als der
70     // aktuelle Gruppencode angegeben werden. (DXFGroupReader speichert die Parameter
71     // zu allen Gruppencodes. Dadurch ist es moeglich, dass zunaechst mit Read() einige
72     // verschiedene Gruppen eingelesen werden, bevor sie ausgewertet werden.)
73     long         GetI(sal_uInt16 nG);
74     double       GetF(sal_uInt16 nG);
75     const char * GetS(sal_uInt16 nG);
76 
77     // Mit folgenden Methoden koennen die aktuell gespeicherten Werte zu den
78     // Gruppencodes veraendert werden. (z.B. um Defaultwerte zu setzen, bevor
79     // 'blind' eine Menge von Gruppen eingelesen wird.)
80     void SetF(sal_uInt16 nG, double fF);
81     void SetS(sal_uInt16 nG, const char * sS); // (wird kopiert)
82 
83 private:
84 
85     void   ReadLine(char * ptgt);
86     long   ReadI();
87     double ReadF();
88     void   ReadS(char * ptgt);
89 
90     SvStream & rIS;
91     char sIBuff[1024];
92     sal_uInt16 nIBuffSize,nIBuffPos;
93     sal_Bool bStatus;
94     sal_uInt16 nLastG;
95     sal_uLong nGCount;
96 
97     sal_uLong nMinPercent;
98     sal_uLong nMaxPercent;
99     sal_uLong nLastPercent;
100     sal_uLong nFileSize;
101 
102     char   S0_9      [10][DXF_MAX_STRING_LEN+1]; // Strings  Gruppencodes 0..9
103     double F10_59    [50];      // Floats   Gruppencodes 10..59
104     long   I60_79    [20];      // Integers Gruppencodes 60..79
105     long   I90_99    [10];
106     char   S100      [DXF_MAX_STRING_LEN+1];
107     char   S102      [DXF_MAX_STRING_LEN+1];
108     double F140_147  [ 8];      // Floats   Gruppencodes 140..147
109     long   I170_175  [ 6];      // Integers Gruppencodes 170..175
110     double F210_239  [30];      // Floats   Gruppencodes 210..239
111     char   S999_1009 [11][DXF_MAX_STRING_LEN+1]; // Strings  Gruppencodes 999..1009
112     double F1010_1059[50];      // Floats   Gruppencodes 1010..1059
113     long   I1060_1079[20];      // Integers Gruppencodes 1060..1079
114 
115 };
116 
117 
GetStatus()118 inline sal_Bool DXFGroupReader::GetStatus()
119 {
120     return bStatus;
121 }
122 
123 
SetError()124 inline void DXFGroupReader::SetError()
125 {
126     bStatus=sal_False;
127 }
128 
GetG()129 inline sal_uInt16 DXFGroupReader::GetG()
130 {
131     return nLastG;
132 }
133 
GetI()134 inline long DXFGroupReader::GetI()
135 {
136     return GetI(nLastG);
137 }
138 
GetF()139 inline double DXFGroupReader::GetF()
140 {
141     return GetF(nLastG);
142 }
143 
GetS()144 inline const char * DXFGroupReader::GetS()
145 {
146     return GetS(nLastG);
147 }
148 
149 #endif
150 
151 
152