text: /**************************************************************
   * 
   * 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 _BASTYPE_HXX
  #define _BASTYPE_HXX
  
  
  #include <tools/globname.hxx>
  #include <tools/gen.hxx>
  #include <tools/stream.hxx>
  #include <tools/unqid.hxx>
  #include <tools/string.hxx>
  
  class SvStringHashEntry;
  class SvIdlDataBase;
  class SvTokenStream;
  
  /******************** class SvUINT32 **********************************/
  class SvUINT32
  {
      sal_uInt32  nVal;
  public:
                  SvUINT32() { nVal = 0; }
                  SvUINT32( sal_uInt32 n ) : nVal( n ) {}
      SvUINT32 &  operator = ( sal_uInt32 n ) { nVal = n; return *this; }
  
      operator    sal_uInt32 &() { return nVal; }
  
      static sal_uInt32  Read( SvStream & rStm );
      static void    Write( SvStream & rStm, sal_uInt32 nVal );
  
      friend SvStream& operator << (SvStream & rStm, const SvUINT32 & r )
                  { SvUINT32::Write( rStm, r.nVal ); return rStm; }
      friend SvStream& operator >> (SvStream & rStm, SvUINT32 & r )
                  { r.nVal = SvUINT32::Read( rStm ); return rStm; }
  };
  
  
  /******************** class SvINT16 **********************************/
  class SvINT16
  {
      short   nVal;
  public:
                  SvINT16() { nVal = 0; }
                  SvINT16( short n ) : nVal( n ) {}
      SvINT16 &   operator = ( short n ) { nVal = n; return *this; }
  
      operator    short &() { return nVal; }
  
      friend SvStream& operator << (SvStream & rStm, const SvINT16 & r )
                  { SvUINT32::Write( rStm, (sal_uInt32)r.nVal ); return rStm; }
      friend SvStream& operator >> (SvStream & rStm, SvINT16 & r )
                  { r.nVal = (short)SvUINT32::Read( rStm ); return rStm; }
  };
  
  
  /******************** class SvUINT16 **********************************/
  class SvUINT16
  {
      sal_uInt16  nVal;
  public:
                  SvUINT16() { nVal = 0; }
                  SvUINT16( sal_uInt16 n ) : nVal( n ) {}
      SvUINT16 &  operator = ( sal_uInt16 n ) { nVal = n; return *this; }
  
      operator    sal_uInt16 &() { return nVal; }
  
      friend SvStream& operator << (SvStream & rStm, const SvUINT16 & r )
                  { SvUINT32::Write( rStm, (sal_uInt32)r.nVal ); return rStm; }
      friend SvStream& operator >> (SvStream & rStm, SvUINT16 & r )
                  { r.nVal = (sal_uInt16)SvUINT32::Read( rStm ); return rStm; }
  };
  
  
  /******************** class SvINT32 **********************************/
  class SvINT32
  {
      sal_Int32   nVal;
  public:
                  SvINT32() { nVal = 0; }
                  SvINT32( sal_Int32 n ) : nVal( n ) {}
      SvINT32 &   operator = ( sal_Int32 n ) { nVal = n; return *this; }
  
      operator    sal_Int32 &() { return nVal; }
  
      friend SvStream& operator << (SvStream & rStm, const SvINT32 & r )
                  { SvUINT32::Write( rStm, (sal_uInt32)r.nVal ); return rStm; }
      friend SvStream& operator >> (SvStream & rStm, SvINT32 & r )
                  { r.nVal = (sal_Int32)SvUINT32::Read( rStm ); return rStm; }
  };
  
  
  /******************** class Svint **********************************/
  class Svint
  {
      int  	nVal;
  	sal_Bool	bSet;
  public:
                  Svint() { nVal = bSet = 0; }
                  Svint( int n ) : nVal( n ), bSet( sal_True ) {}
                  Svint( int n, sal_Bool bSetP ) : nVal( n ), bSet( bSetP ) {}
      Svint    &  operator = ( int n ) { nVal = n; bSet = sal_True; return *this; }
  
      operator    int ()const { return nVal; }
      sal_Bool        IsSet() const { return bSet; }
  
      friend SvStream& operator << (SvStream & rStm, const Svint & r )
                  { SvUINT32::Write( rStm, (sal_uInt32)r.nVal ); rStm << r.bSet; return rStm; }
      friend SvStream& operator >> (SvStream & rStm, Svint & r )
                  { r.nVal = (int)SvUINT32::Read( rStm ); rStm >> r.bSet ; return rStm; }
  };
  
  
  /******************** class SvBOOL **********************************/
  class SvBOOL
  {
      sal_Bool  nVal:1,
            bSet:1;
  public:
                  SvBOOL() { bSet = nVal = sal_False; }
                  SvBOOL( sal_Bool n ) : nVal( n ), bSet( sal_True ) {}
                  SvBOOL( sal_Bool n, sal_Bool bSetP ) : nVal( n ), bSet( bSetP ) {}
      SvBOOL &    operator = ( sal_Bool n ) { nVal = n; bSet = sal_True; return *this; }
  
      operator    sal_Bool() const { return nVal; }
  #ifdef STC
      operator    int() const { return nVal; }
  #endif
      sal_Bool        Is() const { return nVal; }
      sal_Bool        IsSet() const { return bSet; }
  
      friend SvStream& operator << (SvStream &, const SvBOOL &);
      friend SvStream& operator >> (SvStream &, SvBOOL &);
  
  #ifdef IDL_COMPILER
      sal_Bool        ReadSvIdl( SvStringHashEntry * pName, SvTokenStream & rInStm );
      sal_Bool        WriteSvIdl( SvStringHashEntry * pName, SvStream & rOutStm );
      ByteString      GetSvIdlString( SvStringHashEntry * pName );
  #endif
  };
  
  
  /******************** class SvIdentifier **********************************/
  class SvIdentifier : public ByteString
  {
  public:
                  SvIdentifier(){};
      SvIdentifier & operator = ( const ByteString & rStr )
                  { ByteString::operator =( rStr ); return *this; }
      friend SvStream& operator << (SvStream &, const SvIdentifier &);
      friend SvStream& operator >> (SvStream &, SvIdentifier &);
  
      sal_Bool        IsSet() const { return Len() != 0; }
  #ifdef IDL_COMPILER
      sal_Bool        ReadSvIdl( SvStringHashEntry * pName, SvTokenStream & rInStm );
      sal_Bool        WriteSvIdl( SvStringHashEntry * pName, SvStream & rOutStm,
                              sal_uInt16 nTab );
  #endif
  };
  
  
  /******************** class SvIdentifier **********************************/
  class SvNumberIdentifier : public SvIdentifier
  {
      sal_uInt32  nValue;
      // darf nicht benutzt werden
      sal_Bool    ReadSvIdl( SvStringHashEntry * pName, SvTokenStream & rInStm );
  public:
                  SvNumberIdentifier() : nValue( 0 ) {};
      sal_Bool        IsSet() const
  				{
  					return SvIdentifier::IsSet() || nValue != 0;
  				}
      sal_uInt32      GetValue() const { return nValue; }
      void		SetValue( sal_uInt32 nVal ) { nValue = nVal; }
  
      friend SvStream& operator << (SvStream &, const SvNumberIdentifier &);
      friend SvStream& operator >> (SvStream &, SvNumberIdentifier &);
  #ifdef IDL_COMPILER
      sal_Bool        ReadSvIdl( SvIdlDataBase &, SvTokenStream & rInStm );
      sal_Bool        ReadSvIdl( SvIdlDataBase &, SvStringHashEntry * pName,
                             SvTokenStream & rInStm );
  #endif
  };
  
  
  /******************** class SvString **********************************/
  class SvString : public ByteString
  {
  public:
                  SvString(){};
      SvString &  operator = ( const ByteString & rStr )
                  { ByteString::operator =( rStr ); return *this; }
      sal_Bool        IsSet() const { return Len() != 0; }
      friend SvStream& operator << (SvStream &, const SvString &);
      friend SvStream& operator >> (SvStream &, SvString &);
  
  #ifdef IDL_COMPILER
      sal_Bool        ReadSvIdl( SvStringHashEntry * pName, SvTokenStream & rInStm );
      sal_Bool        WriteSvIdl( SvStringHashEntry * pName, SvStream & rOutStm,
                              sal_uInt16 nTab );
  #endif
  };
  
  
  /******************** class SvHelpText **********************************/
  class SvHelpText : public SvString
  {
  public:
                  SvHelpText() {}
  #ifdef IDL_COMPILER
      sal_Bool        ReadSvIdl( SvIdlDataBase &, SvTokenStream & rInStm );
      sal_Bool        WriteSvIdl( SvIdlDataBase & rBase, SvStream & rOutStm,
                              sal_uInt16 nTab );
  #endif
  };
  
  
  /******************** class SvHelpContext *******************************/
  class SvHelpContext : public SvNumberIdentifier
  {
  };
  
  /******************** class SvUUId *************************************/
  class SvUUId : public SvGlobalName
  {
  public:
                  SvUUId() {}
  #ifdef IDL_COMPILER
      sal_Bool        ReadSvIdl( SvIdlDataBase &, SvTokenStream & rInStm );
      sal_Bool        WriteSvIdl( SvStream & rOutStm );
  #endif
  };
  
  
  /******************** class SvVersion **********************************/
  class SvVersion
  {
      sal_uInt16  nMajorVersion;
      sal_uInt16  nMinorVersion;
  public:
                  SvVersion() : nMajorVersion( 1 ), nMinorVersion( 0 ) {}
      sal_Bool        operator == ( const SvVersion & r )
  				{
  					return (r.nMajorVersion == nMajorVersion)
  							 && (r.nMinorVersion == nMinorVersion);
  				}
      sal_Bool        operator != ( const SvVersion & r )
  				{
  					return !(*this == r);
  				}
  
      sal_uInt16      GetMajorVersion() const { return nMajorVersion; }
      sal_uInt16      GetMinorVersion() const { return nMinorVersion; }
  
      friend SvStream& operator << (SvStream &, const SvVersion &);
      friend SvStream& operator >> (SvStream &, SvVersion &);
  #ifdef IDL_COMPILER
      sal_Bool        ReadSvIdl( SvTokenStream & rInStm );
      sal_Bool        WriteSvIdl( SvStream & rOutStm );
  #endif
  };
  
  
  #endif // _BASTYPE_HXX
  
  