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 #ifndef CSV_FILE_HXX 25*11c03c6dSDamjan Jovanovic #define CSV_FILE_HXX 26*11c03c6dSDamjan Jovanovic 27*11c03c6dSDamjan Jovanovic // USED SERVICES 28*11c03c6dSDamjan Jovanovic // BASE CLASSES 29*11c03c6dSDamjan Jovanovic #include <cosv/bstream.hxx> 30*11c03c6dSDamjan Jovanovic #include <cosv/openclose.hxx> 31*11c03c6dSDamjan Jovanovic // COMPONENTS 32*11c03c6dSDamjan Jovanovic #include <stdio.h> 33*11c03c6dSDamjan Jovanovic #include <cosv/string.hxx> 34*11c03c6dSDamjan Jovanovic // PARAMETERS 35*11c03c6dSDamjan Jovanovic #include <cosv/persist.hxx> 36*11c03c6dSDamjan Jovanovic #include <cosv/ploc.hxx> 37*11c03c6dSDamjan Jovanovic 38*11c03c6dSDamjan Jovanovic 39*11c03c6dSDamjan Jovanovic class FileStrategy; 40*11c03c6dSDamjan Jovanovic 41*11c03c6dSDamjan Jovanovic 42*11c03c6dSDamjan Jovanovic namespace csv 43*11c03c6dSDamjan Jovanovic { 44*11c03c6dSDamjan Jovanovic 45*11c03c6dSDamjan Jovanovic 46*11c03c6dSDamjan Jovanovic /** @task 47*11c03c6dSDamjan Jovanovic File is a class representing a file. 48*11c03c6dSDamjan Jovanovic */ 49*11c03c6dSDamjan Jovanovic class File : public bstream, 50*11c03c6dSDamjan Jovanovic public OpenClose, 51*11c03c6dSDamjan Jovanovic public ploc::Persistent 52*11c03c6dSDamjan Jovanovic { 53*11c03c6dSDamjan Jovanovic public: 54*11c03c6dSDamjan Jovanovic // LIFECYCLE 55*11c03c6dSDamjan Jovanovic File( 56*11c03c6dSDamjan Jovanovic uintt i_nMode = CFM_RW ); 57*11c03c6dSDamjan Jovanovic File( 58*11c03c6dSDamjan Jovanovic const ::csv::ploc::Path & 59*11c03c6dSDamjan Jovanovic i_rLocation, 60*11c03c6dSDamjan Jovanovic uintt i_nMode = CFM_RW ); 61*11c03c6dSDamjan Jovanovic File( 62*11c03c6dSDamjan Jovanovic const char * i_sLocation, 63*11c03c6dSDamjan Jovanovic uintt in_nMode = CFM_RW ); 64*11c03c6dSDamjan Jovanovic File( 65*11c03c6dSDamjan Jovanovic const String & i_sLocation, 66*11c03c6dSDamjan Jovanovic uintt in_nMode = CFM_RW ); 67*11c03c6dSDamjan Jovanovic virtual ~File(); 68*11c03c6dSDamjan Jovanovic 69*11c03c6dSDamjan Jovanovic // OPERATIONS 70*11c03c6dSDamjan Jovanovic bool Assign( 71*11c03c6dSDamjan Jovanovic ploc::Path i_rLocation ); 72*11c03c6dSDamjan Jovanovic bool Assign( 73*11c03c6dSDamjan Jovanovic const char * i_sLocation ); 74*11c03c6dSDamjan Jovanovic bool Assign( 75*11c03c6dSDamjan Jovanovic const String & i_sLocation ); 76*11c03c6dSDamjan Jovanovic // INQUIRY 77*11c03c6dSDamjan Jovanovic uintt Mode() const; 78*11c03c6dSDamjan Jovanovic 79*11c03c6dSDamjan Jovanovic private: 80*11c03c6dSDamjan Jovanovic enum E_LastIO 81*11c03c6dSDamjan Jovanovic { 82*11c03c6dSDamjan Jovanovic io_none = 0, 83*11c03c6dSDamjan Jovanovic io_read, 84*11c03c6dSDamjan Jovanovic io_write 85*11c03c6dSDamjan Jovanovic }; 86*11c03c6dSDamjan Jovanovic 87*11c03c6dSDamjan Jovanovic // Interface bistream: 88*11c03c6dSDamjan Jovanovic virtual uintt do_read( 89*11c03c6dSDamjan Jovanovic void * out_pDest, 90*11c03c6dSDamjan Jovanovic uintt i_nNrofBytes); 91*11c03c6dSDamjan Jovanovic virtual bool inq_eod() const; 92*11c03c6dSDamjan Jovanovic // Interface bostream: 93*11c03c6dSDamjan Jovanovic virtual uintt do_write( 94*11c03c6dSDamjan Jovanovic const void * i_pSrc, 95*11c03c6dSDamjan Jovanovic uintt i_nNrofBytes); 96*11c03c6dSDamjan Jovanovic // Interface bstream: 97*11c03c6dSDamjan Jovanovic virtual uintt do_seek( 98*11c03c6dSDamjan Jovanovic intt i_nDistance, 99*11c03c6dSDamjan Jovanovic seek_dir i_eStartPoint = ::csv::beg ); 100*11c03c6dSDamjan Jovanovic virtual uintt inq_position() const; 101*11c03c6dSDamjan Jovanovic // Interface OpenClose: 102*11c03c6dSDamjan Jovanovic virtual bool do_open( 103*11c03c6dSDamjan Jovanovic uintt in_nOpenModeInfo ); 104*11c03c6dSDamjan Jovanovic virtual void do_close(); 105*11c03c6dSDamjan Jovanovic virtual bool inq_is_open() const; 106*11c03c6dSDamjan Jovanovic // Interface Persistent: 107*11c03c6dSDamjan Jovanovic virtual const ploc::Path & 108*11c03c6dSDamjan Jovanovic inq_MyPath() const; 109*11c03c6dSDamjan Jovanovic // DATA 110*11c03c6dSDamjan Jovanovic ploc::Path aPath; 111*11c03c6dSDamjan Jovanovic FILE * pStream; 112*11c03c6dSDamjan Jovanovic 113*11c03c6dSDamjan Jovanovic uintt nMode; /// RWMode, OpenMode and ShareMode. 114*11c03c6dSDamjan Jovanovic E_LastIO eLastIO; 115*11c03c6dSDamjan Jovanovic }; 116*11c03c6dSDamjan Jovanovic 117*11c03c6dSDamjan Jovanovic 118*11c03c6dSDamjan Jovanovic 119*11c03c6dSDamjan Jovanovic // IMPLEMENTATION 120*11c03c6dSDamjan Jovanovic 121*11c03c6dSDamjan Jovanovic inline uintt 122*11c03c6dSDamjan Jovanovic File::Mode() const 123*11c03c6dSDamjan Jovanovic { return nMode; } 124*11c03c6dSDamjan Jovanovic 125*11c03c6dSDamjan Jovanovic 126*11c03c6dSDamjan Jovanovic } // namespace csv 127*11c03c6dSDamjan Jovanovic 128*11c03c6dSDamjan Jovanovic 129*11c03c6dSDamjan Jovanovic 130*11c03c6dSDamjan Jovanovic 131*11c03c6dSDamjan Jovanovic #endif 132*11c03c6dSDamjan Jovanovic 133*11c03c6dSDamjan Jovanovic 134