summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndreas Bille <abi@openoffice.org>2001-05-08 11:05:06 +0000
committerAndreas Bille <abi@openoffice.org>2001-05-08 11:05:06 +0000
commit90660540b0b7c7dd5f317469d0eadb320c3e6e02 (patch)
tree6060e18085e57476879dab4cc52bbb20d99bdf0c
parentb62e52a1289f4c4f14f517958fdc09151c4ac20c (diff)
Initial revision
Utilities for XmlSearch engine
-rw-r--r--xmlhelp/source/cxxhelp/util/Decompressor.cxx253
-rw-r--r--xmlhelp/source/cxxhelp/util/IndexAccessor.cxx178
-rw-r--r--xmlhelp/source/cxxhelp/util/makefile.mk89
3 files changed, 520 insertions, 0 deletions
diff --git a/xmlhelp/source/cxxhelp/util/Decompressor.cxx b/xmlhelp/source/cxxhelp/util/Decompressor.cxx
new file mode 100644
index 000000000000..d422450baa90
--- /dev/null
+++ b/xmlhelp/source/cxxhelp/util/Decompressor.cxx
@@ -0,0 +1,253 @@
+/*************************************************************************
+ *
+ * $RCSfile: Decompressor.cxx,v $
+ *
+ * $Revision: 1.1 $
+ *
+ * last change: $Author: abi $ $Date: 2001-05-08 12:05:06 $
+ *
+ * The Contents of this file are made available subject to the terms of
+ * either of the following licenses
+ *
+ * - GNU Lesser General Public License Version 2.1
+ * - Sun Industry Standards Source License Version 1.1
+ *
+ * Sun Microsystems Inc., October, 2000
+ *
+ * GNU Lesser General Public License Version 2.1
+ * =============================================
+ * Copyright 2000 by Sun Microsystems, Inc.
+ * 901 San Antonio Road, Palo Alto, CA 94303, USA
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License version 2.1, as published by the Free Software Foundation.
+ *
+ * This library 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 for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ * MA 02111-1307 USA
+ *
+ *
+ * Sun Industry Standards Source License Version 1.1
+ * =================================================
+ * The contents of this file are subject to the Sun Industry Standards
+ * Source License Version 1.1 (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.openoffice.org/license.html.
+ *
+ * Software provided under this License is provided on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING,
+ * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS,
+ * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING.
+ * See the License for the specific provisions governing your rights and
+ * obligations concerning the Software.
+ *
+ * The Initial Developer of the Original Code is: Sun Microsystems, Inc.
+ *
+ * Copyright: 2000 by Sun Microsystems, Inc.
+ *
+ * All Rights Reserved.
+ *
+ * Contributor(s): _______________________________________
+ *
+ *
+ ************************************************************************/
+#ifndef _XMLSEARCH_UTIL_DECOMPRESSOR_HXX_
+#include <util/Decompressor.hxx>
+#endif
+
+using namespace xmlsearch;
+using namespace xmlsearch::util;
+
+
+
+const sal_Int32 Decompressor::BitsInByte = 8;
+const sal_Int32 Decompressor::NBits = 32;
+
+
+sal_Int32 Decompressor::read( sal_Int32 kBits ) throw( excep::XmlSearchException )
+{
+ sal_Int32 shift = BitsInByte - toRead_;
+ if( kBits <= toRead_ )
+ return ( ( readByte_ << shift ) & 0xFF) >>/*>*/ (shift + ( toRead_ -= kBits));
+ else
+ {
+ sal_Int32 result = toRead_ > 0 ? ( ( readByte_ << shift ) & 0xFF ) >>/*>*/ shift : 0;
+ for( kBits -= toRead_; kBits >= BitsInByte; kBits -= BitsInByte )
+ result = ( result << BitsInByte ) | getNextByte();
+ if( kBits > 0 )
+ return ( result << kBits ) | ( ( readByte_ = getNextByte() ) >>/*>*/ ( toRead_ = BitsInByte - kBits ) );
+ else
+ {
+ toRead_ = 0;
+ return result;
+ }
+ }
+}
+
+
+sal_Int32 Decompressor::ascendingDecode( sal_Int32 k,sal_Int32 start,sal_Int32* array )
+ throw( xmlsearch::excep::XmlSearchException )
+{
+ sal_Int32 path = 0, index = 0;
+ LOOP:
+ while( true )
+ if( read() )
+ array[index++] = (start += path | read(k));
+ else
+ for( sal_Int32 cnt = 0;; readByte_ = getNextByte(), toRead_ = BitsInByte )
+ while( toRead_-- > 0 )
+ if( readByte_ & ( 1 << toRead_ ) )
+ {
+ ++cnt;
+ sal_Int32 Path = ( (path >>/*>*/ ( k + cnt ) << cnt ) | read( cnt ) ) << k;
+ if (Path != path)
+ {
+ array[index++] = ( start += ( path = Path ) | read( k ) );
+ goto LOOP;
+ }
+ else
+ return index;
+ }
+ else
+ ++cnt;
+}
+
+
+
+void Decompressor::ascDecode( sal_Int32 k,std::vector< sal_Int32 >& array) throw( excep::XmlSearchException )
+{
+ for( sal_Int32 path = 0,start = 0; ; )
+ if( read() != 0 )
+ array.push_back( start += path | read( k ) );
+ else
+ {
+ sal_Int32 count = countZeroes() + 1;
+ sal_Int32 saved = path;
+ path = ( ( path >>/*>*/ ( k + count ) << count) | read( count ) ) << k;
+ if( path != saved ) // convention for end
+ array.push_back( start += path | read( k ) );
+ else
+ break;
+ }
+}
+
+
+void Decompressor::decode( sal_Int32 k,std::vector< sal_Int32 >& array) throw( excep::XmlSearchException )
+{
+ for( sal_Int32 path = 0; ; )
+ if( read() )
+ array.push_back( path | read( k ) );
+ else
+ {
+ sal_Int32 count = countZeroes() + 1;
+ sal_Int32 saved = path;
+ path = ( ( path >>/*>*/ ( k + count ) << count ) | read( count ) ) << k;
+ if( path != saved ) // convention for end
+ array.push_back( path | read( k ) );
+ else
+ break;
+ }
+}
+
+
+
+void Decompressor::decode(sal_Int32 k, sal_Int32* array ) throw( excep::XmlSearchException )
+{
+ for( sal_Int32 path = 0,index = 0; ; )
+ if( read() )
+ array[ index++] = ( path | read( k ) );
+ else
+ {
+ sal_Int32 count = countZeroes() + 1;
+ sal_Int32 saved = path;
+ path = ( ( path >>/*>*/ ( k + count ) << count ) | read( count ) ) << k;
+ if( path != saved ) // convention for end
+ array[ index++ ] = ( path | read( k ) );
+ else
+ break;
+ }
+}
+
+
+
+sal_Int32 Decompressor::read() throw( excep::XmlSearchException )
+{
+ if( toRead_-- > 0 )
+ return readByte_ & ( 1 << toRead_ );
+ else
+ { // get next word
+ toRead_ = BitsInByte - 1;
+ return ( readByte_ = getNextByte() ) & 0x80;
+ }
+}
+
+
+sal_Int32 Decompressor::countZeroes() throw( excep::XmlSearchException )
+{
+ for( sal_Int32 count = 0; ;readByte_ = getNextByte(),toRead_ = BitsInByte )
+ while( toRead_-- > 0 )
+ if( readByte_ & ( 1 << toRead_ ) )
+ return count;
+ else
+ ++count;
+}
+
+
+#ifndef _XMLSEARCH_UTIL_COMPRESSORITERATOR_HXX_
+#include <util/CompressorIterator.hxx>
+#endif
+
+
+bool Decompressor::readNext( sal_Int32 k,CompressorIterator* it) throw( excep::XmlSearchException )
+{
+ if( read() != 0 )
+ {
+ it->value( path_ | read(k) );
+ return true;
+ }
+ else
+ for( sal_Int32 count = 1; ; readByte_ = getNextByte(), toRead_ = BitsInByte )
+ while( toRead_-- > 0 )
+ if( readByte_ & ( 1 << toRead_ ) )
+ {
+ sal_Int32 saved = path_;
+ path_ = ( (path_ >>/*>*/ ( k + count ) << count ) | read( count ) ) << k;
+ if( path_ != saved )
+ {
+ it->value( path_ | read( k ) );
+ return true;
+ }
+ else
+ return false;
+ }
+ else
+ ++count;
+}
+
+
+
+
+// extern sal_Int32 getInteger_( const sal_Int8* );
+
+
+#ifndef _XMLSEARCH_DB_BLOCK_HXX_
+#include <db/Block.hxx>
+#endif
+
+
+sal_Int32 StreamDecompressor::getNextByte()
+{
+ sal_Int8 a[4];
+ a[0] = a[1] = a[2] = 0;
+ if( in_->readBytes( &a[3],1 ) != -1 )
+ return ::getInteger_( a );
+ else
+ return -1;
+}
diff --git a/xmlhelp/source/cxxhelp/util/IndexAccessor.cxx b/xmlhelp/source/cxxhelp/util/IndexAccessor.cxx
new file mode 100644
index 000000000000..66c9ac376edd
--- /dev/null
+++ b/xmlhelp/source/cxxhelp/util/IndexAccessor.cxx
@@ -0,0 +1,178 @@
+/*************************************************************************
+ *
+ * $RCSfile: IndexAccessor.cxx,v $
+ *
+ * $Revision: 1.1 $
+ *
+ * last change: $Author: abi $ $Date: 2001-05-08 12:05:06 $
+ *
+ * The Contents of this file are made available subject to the terms of
+ * either of the following licenses
+ *
+ * - GNU Lesser General Public License Version 2.1
+ * - Sun Industry Standards Source License Version 1.1
+ *
+ * Sun Microsystems Inc., October, 2000
+ *
+ * GNU Lesser General Public License Version 2.1
+ * =============================================
+ * Copyright 2000 by Sun Microsystems, Inc.
+ * 901 San Antonio Road, Palo Alto, CA 94303, USA
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License version 2.1, as published by the Free Software Foundation.
+ *
+ * This library 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 for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ * MA 02111-1307 USA
+ *
+ *
+ * Sun Industry Standards Source License Version 1.1
+ * =================================================
+ * The contents of this file are subject to the Sun Industry Standards
+ * Source License Version 1.1 (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.openoffice.org/license.html.
+ *
+ * Software provided under this License is provided on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING,
+ * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS,
+ * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING.
+ * See the License for the specific provisions governing your rights and
+ * obligations concerning the Software.
+ *
+ * The Initial Developer of the Original Code is: Sun Microsystems, Inc.
+ *
+ * Copyright: 2000 by Sun Microsystems, Inc.
+ *
+ * All Rights Reserved.
+ *
+ * Contributor(s): _______________________________________
+ *
+ *
+ ************************************************************************/
+#ifdef ABIDEBUG
+#include <abidebug.hxx>
+#endif
+#ifndef _XMLSEARCH_UTIL_INDEXACCESSOR_HXX_
+#include <util/IndexAccessor.hxx>
+#endif
+#ifndef _OSL_FILE_HXX_
+#include <osl/file.hxx>
+#endif
+#ifndef _XMLEARCH_UTIL_RANDOMACCESSSTREAM_HXX_
+#include <util/RandomAccessStream.hxx>
+#endif
+
+using namespace xmlsearch::util;
+
+
+class RandomAccessStreamImpl
+ : public RandomAccessStream
+{
+public:
+
+ RandomAccessStreamImpl( const rtl::OUString& aPath,const rtl::OUString& how )
+ : file_( aPath )
+ {
+ sal_uInt32 flags = 0;
+ const sal_Unicode* bla = how.getStr();
+
+ for( int i = 0; i < how.getLength(); ++i )
+ if( bla[i] == sal_Unicode( 'r' ) )
+ flags |= Read;
+ else if( bla[i] == sal_Unicode( 'w' ) )
+ flags |= Write;
+ else if( bla[i] == sal_Unicode( 'c' ) )
+ flags |= Create;
+
+
+ if( file_.open( flags ) != osl::FileBase::E_None )
+ {
+ file_.close();
+ }
+ }
+
+ ~RandomAccessStreamImpl()
+ {
+ close();
+ }
+
+ virtual void seek( sal_Int32 pos )
+ {
+ file_.setPos( Pos_Absolut,sal_uInt64( pos ) );
+ }
+
+ virtual sal_Int32 readBytes( sal_Int8* data,sal_Int32 num )
+ {
+ sal_uInt64 nbytesread;
+ file_.read( (void*)(data), sal_uInt64(num),nbytesread );
+ return sal_Int32( nbytesread );
+ }
+
+ virtual void writeBytes( sal_Int8*, sal_Int32 )
+ {
+ // Do nothing by now
+ }
+
+ virtual sal_Int32 length()
+ {
+ osl::DirectoryItem aItem;
+ osl::FileStatus aStatus( FileStatusMask_FileSize );
+ osl::DirectoryItem::get( file_,aItem );
+ aItem.getFileStatus( aStatus );
+ return sal_Int32( aStatus.getFileSize() );
+ }
+
+ virtual void close()
+ {
+ file_.close();
+ }
+
+
+private:
+
+ osl::File file_;
+};
+
+
+
+RandomAccessStreamImpl Dic( rtl::OUString::createFromAscii( "//./home/ab106281/work/index/DICTIONARY" ),
+ rtl::OUString::createFromAscii( "how" ) );
+
+
+RandomAccessStream* theFile()
+{
+ return &Dic;
+}
+
+
+
+RandomAccessStream* IndexAccessor::getStream( const rtl::OUString& fileName,const rtl::OUString& how )
+{
+ return new RandomAccessStreamImpl( dirName_ + fileName, how );
+}
+
+
+sal_Int32 IndexAccessor::readByteArray( sal_Int8*& out,const rtl::OUString& fileName )
+{
+ RandomAccessStream* in = getStream( fileName,rtl::OUString::createFromAscii("r") );
+ sal_Int32 n;
+ delete[] out;
+ out = new sal_Int8[ n = in->length() ];
+ in->readBytes( out,n );
+ delete in;
+ return n;
+}
+
+
+
+
+
diff --git a/xmlhelp/source/cxxhelp/util/makefile.mk b/xmlhelp/source/cxxhelp/util/makefile.mk
new file mode 100644
index 000000000000..c9d27cb86699
--- /dev/null
+++ b/xmlhelp/source/cxxhelp/util/makefile.mk
@@ -0,0 +1,89 @@
+#*************************************************************************
+#
+# $RCSfile: makefile.mk,v $
+#
+# $Revision: 1.1 $
+#
+# last change: $Author: abi $ $Date: 2001-05-08 12:05:06 $
+#
+# The Contents of this file are made available subject to the terms of
+# either of the following licenses
+#
+# - GNU Lesser General Public License Version 2.1
+# - Sun Industry Standards Source License Version 1.1
+#
+# Sun Microsystems Inc., October, 2000
+#
+# GNU Lesser General Public License Version 2.1
+# =============================================
+# Copyright 2000 by Sun Microsystems, Inc.
+# 901 San Antonio Road, Palo Alto, CA 94303, USA
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License version 2.1, as published by the Free Software Foundation.
+#
+# This library 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 for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+# MA 02111-1307 USA
+#
+#
+# Sun Industry Standards Source License Version 1.1
+# =================================================
+# The contents of this file are subject to the Sun Industry Standards
+# Source License Version 1.1 (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.openoffice.org/license.html.
+#
+# Software provided under this License is provided on an "AS IS" basis,
+# WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING,
+# WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS,
+# MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING.
+# See the License for the specific provisions governing your rights and
+# obligations concerning the Software.
+#
+# The Initial Developer of the Original Code is: Sun Microsystems, Inc.
+#
+# Copyright: 2000 by Sun Microsystems, Inc.
+#
+# All Rights Reserved.
+#
+# Contributor(s): _______________________________________
+#
+#
+#
+#*************************************************************************
+
+PRJ=..$/..$/..
+
+PRJNAME= xmlhelp
+TARGET= jautil
+AUTOSEG= TRUE
+
+ENABLE_EXCEPTIONS=TRUE
+
+# --- Settings -----------------------------------------------------
+
+.INCLUDE : svpre.mk
+.INCLUDE : settings.mk
+.INCLUDE : sv.mk
+
+# --- Files --------------------------------------------------------
+
+.IF "$(header)" == ""
+
+SLOFILES=\
+ $(SLO)$/Decompressor.obj \
+ $(SLO)$/IndexAccessor.obj
+.ENDIF
+
+# --- Targets ------------------------------------------------------
+
+.INCLUDE : target.mk
+