#include <string>
+#include <vector>
+#include <iostream>
#include "filedata.hpp"
string _permissions,
string _user,
string _group,
- unsigned long _size,
+ unsigned long long _size,
unsigned long long _modified_date,
- string _name,
- unsigned long long _last_backup )
+ unsigned long long _last_backup,
+ string _name )
: filetype( _type ),
permissions( _permissions ),
username( _user ),
groupname( _group ),
filesize( _size ),
modified_date( _modified_date ),
- filename( _name ),
- last_backup_date( _last_backup )
+ last_backup_date( _last_backup ),
+ filename( _name )
{}
+
+vector<string> split( const string &line, char c, int limit = -1 ) {
+ string::size_type start = 0, end = 0;
+
+ vector<string> out;
+ while( 0 != limit-- && end != line.size() ) {
+ if( 0 == limit ) {
+ end = line.size();
+ } else {
+ end = line.find( c, start );
+ if( end == string::npos ) {
+ end = line.size();
+ }
+ }
+ out.push_back( line.substr( start, end-start ) );
+ start = end + 1;
+ }
+ return out;
+}
+
+ostream &operator<<( const FileData *d, ostream &o ) {
+ return operator<<( *d, o );
+}
+
+ostream &operator<<( const FileData &d, ostream &o ) {
+ o << d.getFileType() << ' ';
+ o << d.getPermissions() << ' ';
+ o << d.getUserName() << ' ';
+ o << d.getGroupName() << ' ';
+ o << d.getFileSize() << ' ';
+ o << d.getModifiedDate() << ' ';
+ o << d.getLastBackupDate() << ' ';
+ o << d.getFileName() << '\0';
+
+ return o;
+}
+
+istream &operator>>( istream &i, FileData *d ) {
+ return operator>>( i, *d );
+}
+
+istream &operator>>( istream &i, FileData &d ) {
+ string file_string;
+
+ for( int c = i.get(); 0 != c && ! i.eof(); c = i.get() ) {
+ file_string.push_back( c );
+ }
+
+ if( 0 != file_string.size() ) {
+ // Example entry
+ // type perms user group size datemodified name (8 total)
+ // f 0600 cnb cnb 424 20051015205340 0 ./.git/index
+ vector<string> vals = split( file_string, ' ', 8 );
+ d.setFileType( vals[0][0] );
+ d.setPermissions( vals[1] );
+ d.setUserName( vals[2] );
+ d.setGroupName( vals[3] );
+ d.setFileSize( atoi( vals[4].c_str() ) );
+ d.setModifiedDate( atoi( vals[5].c_str() ) );
+ d.setLastBackupDate( atoi( vals[6].c_str() ) );
+ d.setFileName( vals[7] );
+ }
+
+ return i;
+}