summaryrefslogtreecommitdiff
path: root/idl/inc/lex.hxx
diff options
context:
space:
mode:
Diffstat (limited to 'idl/inc/lex.hxx')
-rw-r--r--[-rwxr-xr-x]idl/inc/lex.hxx123
1 files changed, 64 insertions, 59 deletions
diff --git a/idl/inc/lex.hxx b/idl/inc/lex.hxx
index 9c7ecdd95f3a..3aa22139a4dd 100755..100644
--- a/idl/inc/lex.hxx
+++ b/idl/inc/lex.hxx
@@ -1,3 +1,4 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
/*************************************************************************
*
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
@@ -28,18 +29,18 @@
#ifndef _LEX_HXX
#define _LEX_HXX
+#include <boost/ptr_container/ptr_vector.hpp>
+
#include <hash.hxx>
#include <tools/gen.hxx>
#include <tools/stream.hxx>
-/******************** enum ***********************************************/
enum SVTOKEN_ENUM { SVTOKEN_EMPTY, SVTOKEN_COMMENT,
SVTOKEN_INTEGER, SVTOKEN_STRING,
SVTOKEN_BOOL, SVTOKEN_IDENTIFIER,
SVTOKEN_CHAR, SVTOKEN_RTTIBASE,
SVTOKEN_EOF, SVTOKEN_HASHID };
-/******************** class SvToken **************************************/
class BigInt;
class SvToken
{
@@ -52,7 +53,6 @@ friend class SvTokenStream;
sal_uLong nLong;
sal_Bool bBool;
char cChar;
-// SvRttiBase * pComplexObj;
SvStringHashEntry * pHash;
};
public:
@@ -62,7 +62,6 @@ public:
SvToken( SVTOKEN_ENUM nTypeP, sal_Bool b );
SvToken( char c );
SvToken( SVTOKEN_ENUM nTypeP, const ByteString & rStr );
-// SvToken( SvRttiBase * pComplexObj );
SvToken( SVTOKEN_ENUM nTypeP );
SvToken & operator = ( const SvToken & rObj );
@@ -101,7 +100,6 @@ public:
sal_uLong GetNumber() const { return nLong; }
sal_Bool GetBool() const { return bBool; }
char GetChar() const { return cChar; }
-// SvRttiBase *GetObject() const { return pComplexObj; }
void SetHash( SvStringHashEntry * pHashP )
{ pHash = pHashP; nType = SVTOKEN_HASHID; }
@@ -127,26 +125,17 @@ inline SvToken::SvToken( char c )
inline SvToken::SvToken( SVTOKEN_ENUM nTypeP, const ByteString & rStr )
: nType( nTypeP ), aString( rStr ) {}
-/*
-inline SvToken::SvToken( SvRttiBase * pObj )
- : nType( SVTOKEN_RTTIBASE ), pComplexObj( pObj )
- { pObj->AddRef(); }
-*/
-
inline SvToken::SvToken( SVTOKEN_ENUM nTypeP )
: nType( nTypeP ) {}
-DECLARE_LIST( SvTokenList, SvToken * )
-
-/******************** class SvTokenStream ********************************/
class SvTokenStream
{
sal_uLong nLine, nColumn;
int nBufPos;
- int c; // naechstes Zeichen
+ int c; // next character
CharSet nCharSet;
- char * pCharTab; // Zeiger auf die Konverierungstabelle
- sal_uInt16 nTabSize; // Tabulator Laenge
+ char * pCharTab; // pointer to conversion table
+ sal_uInt16 nTabSize; // length of tabulator
ByteString aStrTrue;
ByteString aStrFalse;
sal_uLong nMaxPos;
@@ -154,8 +143,8 @@ class SvTokenStream
SvFileStream * pInStream;
SvStream & rInStream;
String aFileName;
- SvTokenList aTokList;
- SvToken * pCurToken;
+ boost::ptr_vector<SvToken> aTokList;
+ boost::ptr_vector<SvToken>::iterator pCurToken;
void InitCtor();
@@ -178,7 +167,7 @@ class SvTokenStream
}
void CalcColumn()
{
- // wenn Zeilenende berechnung sparen
+ // if end of line spare calculation
if( 0 != c )
{
sal_uInt16 n = 0;
@@ -202,30 +191,37 @@ public:
{ nTabSize = nTabSizeP; }
sal_uInt16 GetTabSize() const { return nTabSize; }
- SvToken * GetToken_PrevAll()
- {
- SvToken * pRetToken = pCurToken;
- if( NULL == (pCurToken = aTokList.Prev()) )
- // Current Zeiger nie Null
- pCurToken = pRetToken;
+ SvToken* GetToken_PrevAll()
+ {
+ boost::ptr_vector<SvToken>::iterator pRetToken = pCurToken;
+
+ // current iterator always valid
+ if(pCurToken != aTokList.begin())
+ --pCurToken;
+
+ return &(*pRetToken);
+ }
+
+ SvToken* GetToken_NextAll()
+ {
+ boost::ptr_vector<SvToken>::iterator pRetToken = pCurToken++;
+
+ if (pCurToken == aTokList.end())
+ pCurToken = pRetToken;
+
+ SetMax();
+
+ return &(*pRetToken);
+ }
+
+ SvToken* GetToken_Next()
+ {
+ // comments get removed initially
+ return GetToken_NextAll();
+ }
+
+ SvToken* GetToken() const { return &(*pCurToken); }
- return pRetToken;
- }
- SvToken * GetToken_NextAll()
- {
- SvToken * pRetToken = pCurToken;
- if( NULL == (pCurToken = aTokList.Next()) )
- // Current Zeiger nie Null
- pCurToken = pRetToken;
- SetMax();
- return pRetToken;
- }
- SvToken * GetToken_Next()
- {
- // Kommentare werden initial entfernt
- return GetToken_NextAll();
- }
- SvToken * GetToken() const { return pCurToken; }
sal_Bool Read( char cChar )
{
if( pCurToken->IsChar()
@@ -237,6 +233,7 @@ public:
else
return sal_False;
}
+
void ReadDelemiter()
{
if( pCurToken->IsChar()
@@ -247,25 +244,33 @@ public:
}
}
- sal_uInt32 Tell() const
- { return aTokList.GetCurPos(); }
- void Seek( sal_uInt32 nPos )
- {
- pCurToken = aTokList.Seek( nPos );
- SetMax();
- }
- void SeekRel( sal_Int32 nRelPos )
- {
- pCurToken = aTokList.Seek( Tell() + nRelPos );
- SetMax();
- }
- void SeekEnd()
- {
- pCurToken = aTokList.Seek( nMaxPos );
- }
+ sal_uInt32 Tell() const { return pCurToken-aTokList.begin(); }
+
+ void Seek( sal_uInt32 nPos )
+ {
+ pCurToken = aTokList.begin() + nPos;
+ SetMax();
+ }
+
+ void SeekRel( sal_uInt32 nRelPos )
+ {
+ sal_uInt32 relIdx = Tell() + nRelPos;
+
+ if ( relIdx < aTokList.size())
+ {
+ pCurToken = aTokList.begin()+ (Tell() + nRelPos );
+ SetMax();
+ }
+ }
+
+ void SeekEnd()
+ {
+ pCurToken = aTokList.begin()+nMaxPos;
+ }
};
#endif // _LEX_HXX
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */