1*8a106958SDamjan Jovanovic /************************************************************** 2*8a106958SDamjan Jovanovic * 3*8a106958SDamjan Jovanovic * Licensed to the Apache Software Foundation (ASF) under one 4*8a106958SDamjan Jovanovic * or more contributor license agreements. See the NOTICE file 5*8a106958SDamjan Jovanovic * distributed with this work for additional information 6*8a106958SDamjan Jovanovic * regarding copyright ownership. The ASF licenses this file 7*8a106958SDamjan Jovanovic * to you under the Apache License, Version 2.0 (the 8*8a106958SDamjan Jovanovic * "License"); you may not use this file except in compliance 9*8a106958SDamjan Jovanovic * with the License. You may obtain a copy of the License at 10*8a106958SDamjan Jovanovic * 11*8a106958SDamjan Jovanovic * http://www.apache.org/licenses/LICENSE-2.0 12*8a106958SDamjan Jovanovic * 13*8a106958SDamjan Jovanovic * Unless required by applicable law or agreed to in writing, 14*8a106958SDamjan Jovanovic * software distributed under the License is distributed on an 15*8a106958SDamjan Jovanovic * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16*8a106958SDamjan Jovanovic * KIND, either express or implied. See the License for the 17*8a106958SDamjan Jovanovic * specific language governing permissions and limitations 18*8a106958SDamjan Jovanovic * under the License. 19*8a106958SDamjan Jovanovic * 20*8a106958SDamjan Jovanovic *************************************************************/ 21*8a106958SDamjan Jovanovic 22*8a106958SDamjan Jovanovic 23*8a106958SDamjan Jovanovic 24*8a106958SDamjan Jovanovic #include <precomp.h> 25*8a106958SDamjan Jovanovic #include <cosv/mbstream.hxx> 26*8a106958SDamjan Jovanovic 27*8a106958SDamjan Jovanovic // NOT FULLY DECLARED SERVICES 28*8a106958SDamjan Jovanovic #include <string.h> 29*8a106958SDamjan Jovanovic 30*8a106958SDamjan Jovanovic 31*8a106958SDamjan Jovanovic namespace csv 32*8a106958SDamjan Jovanovic { 33*8a106958SDamjan Jovanovic 34*8a106958SDamjan Jovanovic 35*8a106958SDamjan Jovanovic 36*8a106958SDamjan Jovanovic mbstream::mbstream( uintt i_nSize ) 37*8a106958SDamjan Jovanovic : dpOwnedMemorySpace( new char[i_nSize+1] ), 38*8a106958SDamjan Jovanovic nSize( i_nSize ), 39*8a106958SDamjan Jovanovic nCurPosition( 0 ) 40*8a106958SDamjan Jovanovic { 41*8a106958SDamjan Jovanovic dpOwnedMemorySpace[i_nSize] = '\0'; 42*8a106958SDamjan Jovanovic } 43*8a106958SDamjan Jovanovic 44*8a106958SDamjan Jovanovic mbstream::~mbstream() 45*8a106958SDamjan Jovanovic { 46*8a106958SDamjan Jovanovic delete [] dpOwnedMemorySpace; 47*8a106958SDamjan Jovanovic } 48*8a106958SDamjan Jovanovic 49*8a106958SDamjan Jovanovic void 50*8a106958SDamjan Jovanovic mbstream::resize( uintt i_nSize ) 51*8a106958SDamjan Jovanovic { 52*8a106958SDamjan Jovanovic DYN char * pNew = new char[i_nSize]; 53*8a106958SDamjan Jovanovic memcpy( pNew, dpOwnedMemorySpace, min(i_nSize,nSize) ); 54*8a106958SDamjan Jovanovic delete [] dpOwnedMemorySpace; 55*8a106958SDamjan Jovanovic dpOwnedMemorySpace = pNew; 56*8a106958SDamjan Jovanovic nSize = i_nSize; 57*8a106958SDamjan Jovanovic } 58*8a106958SDamjan Jovanovic 59*8a106958SDamjan Jovanovic uintt 60*8a106958SDamjan Jovanovic mbstream::do_read( void * out_pDest, 61*8a106958SDamjan Jovanovic uintt i_nNrofBytes ) 62*8a106958SDamjan Jovanovic { 63*8a106958SDamjan Jovanovic uintt ret = min( i_nNrofBytes, nSize - nCurPosition ); 64*8a106958SDamjan Jovanovic memcpy( out_pDest, dpOwnedMemorySpace, ret ); 65*8a106958SDamjan Jovanovic nCurPosition += ret; 66*8a106958SDamjan Jovanovic return ret; 67*8a106958SDamjan Jovanovic } 68*8a106958SDamjan Jovanovic 69*8a106958SDamjan Jovanovic bool 70*8a106958SDamjan Jovanovic mbstream::inq_eod() const 71*8a106958SDamjan Jovanovic { 72*8a106958SDamjan Jovanovic return nCurPosition == nSize; 73*8a106958SDamjan Jovanovic } 74*8a106958SDamjan Jovanovic 75*8a106958SDamjan Jovanovic uintt 76*8a106958SDamjan Jovanovic mbstream::do_write( const void * i_pSrc, 77*8a106958SDamjan Jovanovic uintt i_nNrofBytes ) 78*8a106958SDamjan Jovanovic { 79*8a106958SDamjan Jovanovic resize( max( 3 * (nSize+1) / 2, nCurPosition + i_nNrofBytes) ); 80*8a106958SDamjan Jovanovic memcpy( dpOwnedMemorySpace+nCurPosition, i_pSrc, i_nNrofBytes ); 81*8a106958SDamjan Jovanovic nCurPosition += i_nNrofBytes; 82*8a106958SDamjan Jovanovic return i_nNrofBytes; 83*8a106958SDamjan Jovanovic } 84*8a106958SDamjan Jovanovic 85*8a106958SDamjan Jovanovic uintt 86*8a106958SDamjan Jovanovic mbstream::do_seek( intt i_nDistance, 87*8a106958SDamjan Jovanovic seek_dir i_eStartPoint ) 88*8a106958SDamjan Jovanovic { 89*8a106958SDamjan Jovanovic switch ( i_eStartPoint ) 90*8a106958SDamjan Jovanovic { 91*8a106958SDamjan Jovanovic case beg: if ( uintt(i_nDistance) < nSize ) 92*8a106958SDamjan Jovanovic nCurPosition = uintt(i_nDistance); 93*8a106958SDamjan Jovanovic break; 94*8a106958SDamjan Jovanovic case cur: if ( i_nDistance < 0 95*8a106958SDamjan Jovanovic ? uintt(-i_nDistance) <= nCurPosition 96*8a106958SDamjan Jovanovic : uintt(i_nDistance) + nCurPosition < nSize ) 97*8a106958SDamjan Jovanovic nCurPosition = uintt( intt(nCurPosition) + i_nDistance ); 98*8a106958SDamjan Jovanovic break; 99*8a106958SDamjan Jovanovic case end: if ( i_nDistance < 0 100*8a106958SDamjan Jovanovic AND uintt(-i_nDistance) < nSize - 1 ) 101*8a106958SDamjan Jovanovic nCurPosition = uintt( intt(nSize) - 1 + i_nDistance ); 102*8a106958SDamjan Jovanovic break; 103*8a106958SDamjan Jovanovic } 104*8a106958SDamjan Jovanovic return position(); 105*8a106958SDamjan Jovanovic } 106*8a106958SDamjan Jovanovic 107*8a106958SDamjan Jovanovic uintt 108*8a106958SDamjan Jovanovic mbstream::inq_position() const 109*8a106958SDamjan Jovanovic { 110*8a106958SDamjan Jovanovic return nCurPosition; 111*8a106958SDamjan Jovanovic } 112*8a106958SDamjan Jovanovic 113*8a106958SDamjan Jovanovic 114*8a106958SDamjan Jovanovic } // namespace csv 115*8a106958SDamjan Jovanovic 116