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