1 /************************************************************** 2 * 3 * Licensed to the Apache Software Foundation (ASF) under one 4 * or more contributor license agreements. See the NOTICE file 5 * distributed with this work for additional information 6 * regarding copyright ownership. The ASF licenses this file 7 * to you under the Apache License, Version 2.0 (the 8 * "License"); you may not use this file except in compliance 9 * with the License. You may obtain a copy of the License at 10 * 11 * http://www.apache.org/licenses/LICENSE-2.0 12 * 13 * Unless required by applicable law or agreed to in writing, 14 * software distributed under the License is distributed on an 15 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16 * KIND, either express or implied. See the License for the 17 * specific language governing permissions and limitations 18 * under the License. 19 * 20 *************************************************************/ 21 22 23 #ifndef _RTL_BYTESEQ_HXX_ 24 #define _RTL_BYTESEQ_HXX_ 25 26 #include <osl/interlck.h> 27 #include <rtl/byteseq.h> 28 #include <rtl/alloc.h> 29 #include <rtl/memory.h> 30 31 #if ! defined EXCEPTIONS_OFF 32 #include <new> 33 #endif 34 35 36 namespace rtl 37 { 38 39 //__________________________________________________________________________________________________ 40 inline ByteSequence::ByteSequence() SAL_THROW( () ) 41 : _pSequence( 0 ) 42 { 43 ::rtl_byte_sequence_construct( &_pSequence, 0 ); 44 } 45 //__________________________________________________________________________________________________ 46 inline ByteSequence::ByteSequence( const ByteSequence & rSeq ) SAL_THROW( () ) 47 : _pSequence( 0 ) 48 { 49 ::rtl_byte_sequence_assign( &_pSequence, rSeq._pSequence ); 50 } 51 //__________________________________________________________________________________________________ 52 inline ByteSequence::ByteSequence( sal_Sequence *pSequence) SAL_THROW( () ) 53 : _pSequence( pSequence ) 54 { 55 ::rtl_byte_sequence_acquire( pSequence ); 56 } 57 //__________________________________________________________________________________________________ 58 inline ByteSequence::ByteSequence( const sal_Int8 * pElements, sal_Int32 len ) 59 : _pSequence( 0 ) 60 { 61 ::rtl_byte_sequence_constructFromArray( &_pSequence, pElements, len ); 62 #if ! defined EXCEPTIONS_OFF 63 if (_pSequence == 0) 64 throw ::std::bad_alloc(); 65 #endif 66 } 67 //__________________________________________________________________________________________________ 68 inline ByteSequence::ByteSequence( sal_Int32 len, enum __ByteSequence_NoDefault ) 69 : _pSequence( 0 ) 70 { 71 ::rtl_byte_sequence_constructNoDefault( &_pSequence, len ); 72 #if ! defined EXCEPTIONS_OFF 73 if (_pSequence == 0) 74 throw ::std::bad_alloc(); 75 #endif 76 } 77 //__________________________________________________________________________________________________ 78 inline ByteSequence::ByteSequence( sal_Sequence *pSequence, enum __ByteSequence_NoAcquire ) SAL_THROW( () ) 79 : _pSequence( pSequence ) 80 { 81 } 82 //__________________________________________________________________________________________________ 83 inline ByteSequence::ByteSequence( sal_Int32 len ) 84 : _pSequence( 0 ) 85 { 86 ::rtl_byte_sequence_construct( &_pSequence, len ); 87 #if ! defined EXCEPTIONS_OFF 88 if (_pSequence == 0) 89 throw ::std::bad_alloc(); 90 #endif 91 } 92 //__________________________________________________________________________________________________ 93 inline ByteSequence::~ByteSequence() SAL_THROW( () ) 94 { 95 ::rtl_byte_sequence_release( _pSequence ); 96 } 97 //__________________________________________________________________________________________________ 98 inline ByteSequence & ByteSequence::operator = ( const ByteSequence & rSeq ) SAL_THROW( () ) 99 { 100 ::rtl_byte_sequence_assign( &_pSequence, rSeq._pSequence ); 101 return *this; 102 } 103 //__________________________________________________________________________________________________ 104 inline sal_Bool ByteSequence::operator == ( const ByteSequence & rSeq ) const SAL_THROW( () ) 105 { 106 return ::rtl_byte_sequence_equals( _pSequence, rSeq._pSequence ); 107 } 108 //__________________________________________________________________________________________________ 109 inline sal_Int8 * ByteSequence::getArray() 110 { 111 ::rtl_byte_sequence_reference2One( &_pSequence ); 112 #if ! defined EXCEPTIONS_OFF 113 if (_pSequence == 0) 114 throw ::std::bad_alloc(); 115 #endif 116 return (sal_Int8 *)_pSequence->elements; 117 } 118 //__________________________________________________________________________________________________ 119 inline void ByteSequence::realloc( sal_Int32 nSize ) 120 { 121 ::rtl_byte_sequence_realloc( &_pSequence, nSize ); 122 #if ! defined EXCEPTIONS_OFF 123 if (_pSequence == 0) 124 throw ::std::bad_alloc(); 125 #endif 126 } 127 //__________________________________________________________________________________________________ 128 inline sal_Int8 & ByteSequence::operator [] ( sal_Int32 nIndex ) 129 { 130 return getArray()[ nIndex ]; 131 } 132 //__________________________________________________________________________________________________ 133 inline sal_Bool ByteSequence::operator != ( const ByteSequence & rSeq ) const SAL_THROW( () ) 134 { 135 return (! operator == ( rSeq )); 136 } 137 138 } 139 #endif 140