summaryrefslogtreecommitdiff
path: root/sal/inc/rtl/byteseq.h
diff options
context:
space:
mode:
Diffstat (limited to 'sal/inc/rtl/byteseq.h')
-rw-r--r--sal/inc/rtl/byteseq.h330
1 files changed, 330 insertions, 0 deletions
diff --git a/sal/inc/rtl/byteseq.h b/sal/inc/rtl/byteseq.h
new file mode 100644
index 000000000000..c4d5c5b1f694
--- /dev/null
+++ b/sal/inc/rtl/byteseq.h
@@ -0,0 +1,330 @@
+/*************************************************************************
+ *
+ * $RCSfile: byteseq.h,v $
+ *
+ * $Revision: 1.1.1.1 $
+ *
+ * last change: $Author: hr $ $Date: 2000-09-18 15:17:13 $
+ *
+ * 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 _RTL_BYTESEQ_H_
+#define _RTL_BYTESEQ_H_
+
+#ifndef _SAL_TYPES_H_
+#include <sal/types.h>
+#endif
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
+/** Assures that the reference count of the given byte sequence is one.
+ Otherwise a new copy of the sequence is created with a reference count of one.
+ <br>
+ @param ppSequence sequence
+*/
+void SAL_CALL rtl_byte_sequence_reference2One(
+ sal_Sequence ** ppSequence );
+
+/** Reallocates length of byte sequence.
+ <br>
+ @param ppSequence sequence
+ @param nSize new size of sequence
+*/
+void SAL_CALL rtl_byte_sequence_realloc(
+ sal_Sequence ** ppSequence, sal_Int32 nSize );
+
+/** Acquires the byte sequence <br>
+ @param pSequence sequence, that shall be acquired.
+ */
+void SAL_CALL rtl_byte_sequence_acquire( sal_Sequence *pSequence );
+
+/** Releases the byte sequence. If the refcount drops to zero,
+ * the sequence is freed.<br>
+
+ @param pSequence sequence, that shall be released. Invalid after call.
+ */
+void SAL_CALL rtl_byte_sequence_release( sal_Sequence *pSequence );
+
+/** Constructs a bytes sequence with length nLength. All bytes are set to zero.
+ *
+ * @param On entry *ppSequence may be null , otherwise it is released.
+ * After the call, ppSequence contains the newly constructed sequence.
+ *
+ *
+ **/
+void SAL_CALL rtl_byte_sequence_construct( sal_Sequence **ppSequence , sal_Int32 nLength );
+
+/** Constructs a bytes sequence with length nLength. The data is not initialized.
+ *
+ * @param ppSequence contains the newly constructed sequence.
+ * *ppSequence is released on entry if needed.
+ *
+ **/
+void SAL_CALL rtl_byte_sequence_constructNoDefault(
+ sal_Sequence **ppSequence , sal_Int32 nLength );
+
+/** Constructs a byte sequence with length nLength and copies nLength bytes from pData.
+ *
+ * @param ppSequence contains the newly constructed sequence.
+ * *ppSequence is released on entry if needed.
+ **/
+void SAL_CALL rtl_byte_sequence_constructFromArray(
+ sal_Sequence **ppSequence, const sal_Int8 *pData , sal_Int32 nLength );
+
+/** Assigns the byte sequence pSequence to ppSequence.
+ *
+ * @param On entry *ppSequence may be null , otherwise it is released.
+ * ppSequence contains after the call a copy of pSequence.
+ * @param pSequence the source sequence
+ **/
+void SAL_CALL rtl_byte_sequence_assign( sal_Sequence **ppSequence , sal_Sequence *pSequence );
+
+/** Compares two byte sequences.
+ *
+ * @return sal_False, if the data within the sequences are different. <br>
+ * sal_True, if the data within the sequences are identical <br>
+ **/
+sal_Bool SAL_CALL rtl_byte_sequence_equals( sal_Sequence *pSequence1 , sal_Sequence *pSequence2 );
+
+
+/** Returns the data pointer of the sequence.
+ *
+ * @return const pointer to the data of the sequence. If rtl_byte_sequence_reference2One
+ * has been called before, the pointer may be casted to a non const pointer and
+ * the sequence may be modified.
+ **/
+const sal_Int8 *SAL_CALL rtl_byte_sequence_getConstArray( sal_Sequence *pSequence );
+
+/** Returns the length of the sequence
+ *
+ *
+ **/
+sal_Int32 SAL_CALL rtl_byte_sequence_getLength( sal_Sequence *pSequence );
+
+#ifdef __cplusplus
+}
+namespace rtl
+{
+
+enum __ByteSequence_NoDefault
+{
+ /** This enum value can be used to create a bytesequence with uninitalized data.
+ <br>
+ */
+ BYTESEQ_NODEFAULT = 0xcafe
+};
+
+enum __ByteSequence_NoAcquire
+{
+ /** This enum value can be used to create a bytesequence from a C-Handle without
+ acquiring the handle.
+ <br>
+ */
+ BYTESEQ_NOACQUIRE = 0xcafebabe
+};
+/** C++ class representing a SAL byte sequence.<br>
+ C++ Sequences are reference counted and shared, so the sequence keeps a handle
+ to its data.
+ To keep value semantics, copies are only generated if the sequence is to be modified
+ (new handle).
+ <br>
+*/
+class ByteSequence
+{
+ /** sequence handle<br>
+ */
+ sal_Sequence * _pSequence;
+
+public:
+ /** Default constructor:
+ Creates an empty sequence.
+ <br>
+ */
+ inline ByteSequence();
+ /** Copy constructor:
+ Creates a copy of given sequence.
+ <br>
+ @param rSeq another byte sequence
+ */
+ inline ByteSequence( const ByteSequence & rSeq );
+ /** Copy constructor
+ Creates a copy from the C-Handle.
+ */
+ inline ByteSequence( sal_Sequence *pSequence );
+ /** Constructor:
+ Creates a copy of given bytes.
+ <br>
+ @param pElement an array of bytes
+ @param len number of bytes
+ */
+ inline ByteSequence( const sal_Int8 * pElements, sal_Int32 len );
+ /** Constructor:
+ Creates sequence of given length and initializes all bytes to 0.
+ <br>
+ @param len initial sequence length
+ */
+ inline ByteSequence( sal_Int32 len );
+ /** Constructor:
+ Creates sequence of given length and does NOT initialize data. Use
+ this ctor for performance optimization only.
+ <br>
+ @param len initial sequence length
+ @param dummy parameter
+ */
+ inline ByteSequence( sal_Int32 len , enum __ByteSequence_NoDefault nodefault );
+ /** Constructor:
+ Creates a sequence from a C-Handle without acquiring the handle. Eitherway
+ the handle is release by the destructor. This ctor is useful, when working
+ with a c-interface (it safes a pair of acquire and release call and is thus
+ a performance optimization only ).
+ <br>
+ */
+ inline ByteSequence( sal_Sequence *pSequence , enum __ByteSequence_NoAcquire noacquire );
+ /** Destructor:
+ Releases sequence handle. Last handle will free memory.
+ <br>
+ */
+ inline ~ByteSequence();
+
+ /** Assignment operator:
+ Acquires given sequence handle and releases previously set handle.
+ <br>
+ @param rSeq another byte sequence
+ @return this sequence
+ */
+ inline ByteSequence & SAL_CALL operator = ( const ByteSequence & rSeq );
+
+ /** Gets length of sequence.
+ <br>
+ @return length of sequence
+ */
+ inline sal_Int32 SAL_CALL getLength() const
+ { return _pSequence->nElements; }
+
+ /** Gets a pointer to byte array for <b>reading</b>.
+ If the sequence has a length of 0, then the returned pointer is undefined.
+ <br>
+ @return pointer to byte array
+ */
+ inline const sal_Int8 * SAL_CALL getConstArray() const
+ { return (const sal_Int8 *)_pSequence->elements; }
+ /** Gets a pointer to elements array for <b>reading and writing</b>.<br>
+ In general if the sequence has a handle acquired by other sequences
+ (reference count > 1), then a new sequence is created copying
+ all bytes to keep value semantics!<br>
+ If the sequence has a length of 0, then the returned pointer is undefined.
+ <br>
+ @return pointer to elements array
+ */
+ inline sal_Int8 * SAL_CALL getArray();
+
+ /** Non-const index operator:
+ Obtains a reference to byte indexed at given position.<br>
+ The implementation does <b>not</b> check for array bounds!<br>
+ In general if the sequence has a handle acquired by other sequences
+ (reference count > 1), then a new sequence is created copying
+ all bytes to keep value semantics!
+ <br>
+ @param nIndex index
+ @return non-const C++ reference to element
+ */
+ inline sal_Int8 & SAL_CALL operator [] ( sal_Int32 nIndex )
+ { return getArray()[ nIndex ]; }
+ /** Const index operator:
+ Obtains a reference to byte indexed at given position.<br>
+ The implementation does <b>not</b> check for array bounds!<br>
+ <br>
+ @param nIndex index
+ @return const C++ reference to byte
+ */
+ inline const sal_Int8 & SAL_CALL operator [] ( sal_Int32 nIndex ) const
+ { return getConstArray()[ nIndex ]; }
+
+ /** Equality operator:
+ Compares two sequences.
+ <br>
+ @param rSeq another byte sequence (right side)
+ @return true if both sequences are equal, false otherwise
+ */
+ inline sal_Bool SAL_CALL operator == ( const ByteSequence & rSeq ) const;
+ /** Unequality operator:
+ Compares two sequences.
+ <br>
+ @param rSeq another byte sequence (right side)
+ @return false if both sequences are equal, true otherwise
+ */
+ inline sal_Bool SAL_CALL operator != ( const ByteSequence & rSeq ) const
+ { return (! operator == ( rSeq )); }
+
+ /** Reallocates sequence to new length.
+ If the sequence has a handle acquired by other sequences
+ (reference count > 1), then the remaining elements are copied
+ to a new sequence handle to keep value semantics!
+ <br>
+ @param nSize new size of sequence
+ */
+ inline void SAL_CALL realloc( sal_Int32 nSize );
+
+ /** Returns the (unacquired) C-Handle of the sequence
+ *
+ **/
+ inline sal_Sequence * SAL_CALL getHandle()
+ { return _pSequence; }
+};
+
+}
+#endif
+#endif