00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00013
#include "gn/gnFileSource.h"
00014
#include <fstream>
00015
#include "gn/gnFilter.h"
00016
00017
00018 gnFileSource::gnFileSource(
const gnFileSource& gnfs){
00019
m_openString = gnfs.
m_openString;
00020
m_pFilter = gnfs.
m_pFilter;
00021
m_newlineType = gnfs.
m_newlineType;
00022
m_newlineSize = gnfs.
m_newlineSize;
00023
m_ifstream.open(
m_openString.c_str(), ios::in | ios::binary );
00024
if( !
m_ifstream.is_open() )
00025
m_ifstream.clear();
00026 }
00027
00028
00029 void gnFileSource::Open( string openString )
00030 {
00031
m_ifstream.open(openString.c_str(), ios::in | ios::binary );
00032
if(
m_ifstream.is_open() )
00033 {
00034
m_openString = openString;
00035
if(
ParseStream(
m_ifstream) )
00036 {
00037 ;
00038 }
00039
else{
00040
m_ifstream.clear();
00041
m_ifstream.close();
00042 }
00043 }
else{
00044
m_ifstream.clear();
00045
Throw_gnEx(FileNotOpened());
00046 }
00047 }
00048 void gnFileSource::Open( )
00049 {
00050
m_ifstream.open(
m_openString.c_str(), ios::in | ios::binary );
00051
if( !
m_ifstream.is_open() ){
00052
m_ifstream.clear();
00053
Throw_gnEx(FileNotOpened());
00054 }
00055 }
00056 void gnFileSource::Close()
00057 {
00058
m_ifstream.close();
00059
if(
m_ifstream.is_open() )
00060
Throw_gnEx(IOStreamFailed());
00061 }
00062
00063 boolean gnFileSource::Read(
const uint64 pos,
char* buf,
gnSeqI& bufLen)
00064 {
00065
m_ifstream.seekg(pos, ios::beg);
00066
m_ifstream.read(buf, bufLen);
00067
if(
m_ifstream.fail()){
00068
m_ifstream.clear();
00069
return false;
00070 }
00071
return true;
00072 }
00073
00074 void gnFileSource::DetermineNewlineType()
00075 {
00076
00077
m_newlineType =
gnNewlineUnix;
00078
m_newlineSize = 1;
00079
00080
00081
char buf[ BUFFER_SIZE ];
00082
m_ifstream.getline( buf, BUFFER_SIZE);
00083
m_ifstream.seekg(-2, ios::cur);
00084
m_ifstream.read( buf, 2);
00085
m_ifstream.seekg(0);
00086
if(buf[1] ==
'\n'){
00087
if(buf[0] ==
'\r'){
00088
m_newlineType =
gnNewlineWindows;
00089
m_newlineSize = 2;
00090 }
else{
00091
if(buf[1] ==
'\r')
00092
m_newlineType =
gnNewlineMac;
00093
else
00094
m_newlineType =
gnNewlineUnix;
00095 }
00096 }
00097 }