blob: 87157db6ea9c3a68c7346f212d1a7ef8255841fb [file] [log] [blame]
/**************************************************************
*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the 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();
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();
// Liefert den letzten Gruppencode (also was Read() zuletzt lieferte)
long GetI();
// 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();
// 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();
// 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);
double GetF(sal_uInt16 nG);
const char * GetS(sal_uInt16 nG);
// 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;
char sIBuff[1024];
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()
{
return bStatus;
}
inline void DXFGroupReader::SetError()
{
bStatus=sal_False;
}
inline sal_uInt16 DXFGroupReader::GetG()
{
return nLastG;
}
inline long DXFGroupReader::GetI()
{
return GetI(nLastG);
}
inline double DXFGroupReader::GetF()
{
return GetF(nLastG);
}
inline const char * DXFGroupReader::GetS()
{
return GetS(nLastG);
}
#endif