mirror of
https://github.com/boostorg/inspect.git
synced 2025-05-11 21:33:58 +00:00
style changes: * consistent copyright/license notice formatting * removed hardcoded name of test file (for crlf) * added include guard to cvs_iterator.hpp * removed now useless #includes of "boost/filesystem/exception.hpp" * used ""-style for #includes of non standard headers * renamed class long_name_check to file_name_check (unfortunately we can't rename the .cpp/.hpp files) [SVN r34848]
82 lines
2.3 KiB
C++
82 lines
2.3 KiB
C++
// cvs_iterator ------------------------------------------------------------//
|
|
|
|
// Copyright Beman Dawes 2003.
|
|
//
|
|
// Distributed under the Boost Software License, Version 1.0.
|
|
// (See accompanying file LICENSE_1_0.txt or copy at
|
|
// http://www.boost.org/LICENSE_1_0.txt)
|
|
|
|
// WARNING: This is just a quick hack. It doesn't conform to C++ Standard
|
|
// Library iterator requirements.
|
|
|
|
#ifndef BOOST_CVS_ITERATOR_HPP
|
|
#define BOOST_CVS_ITERATOR_HPP
|
|
|
|
#include <string>
|
|
#include <assert.h>
|
|
|
|
#include "boost/filesystem/path.hpp"
|
|
#include "boost/filesystem/operations.hpp"
|
|
#include "boost/filesystem/fstream.hpp"
|
|
#include "boost/noncopyable.hpp"
|
|
|
|
namespace hack
|
|
{
|
|
class cvs_iterator : boost::noncopyable
|
|
{
|
|
boost::filesystem::ifstream entries_file;
|
|
boost::filesystem::path dir_path;
|
|
boost::filesystem::path value_path;
|
|
public:
|
|
|
|
cvs_iterator(){} // end iterator
|
|
|
|
~cvs_iterator() { if ( !!entries_file ) entries_file.close(); }
|
|
|
|
cvs_iterator( const boost::filesystem::path & dir_path ) : dir_path(dir_path)
|
|
{
|
|
boost::filesystem::path entries_file_path( dir_path / "CVS/Entries" );
|
|
entries_file.open( entries_file_path );
|
|
if ( !entries_file )
|
|
throw std::string( "could not open: " ) + entries_file_path.string();
|
|
++*this;
|
|
}
|
|
|
|
const boost::filesystem::path & operator*() const { return value_path; }
|
|
|
|
cvs_iterator & operator++()
|
|
{
|
|
assert( !!entries_file );
|
|
std::string contents;
|
|
do
|
|
{
|
|
do
|
|
{
|
|
std::getline( entries_file, contents );
|
|
if ( entries_file.eof() )
|
|
{
|
|
entries_file.close();
|
|
value_path = "";
|
|
return *this;
|
|
}
|
|
} while ( contents == "D" );
|
|
if ( contents[0] == 'D' ) contents.erase( 0, 1 );
|
|
value_path = dir_path
|
|
/ boost::filesystem::path( contents.substr( 1, contents.find( '/', 1 ) ), boost::filesystem::no_check );
|
|
|
|
// in case entries file is mistaken, do until value_path actually found
|
|
} while ( !boost::filesystem::exists( value_path ) );
|
|
return *this;
|
|
}
|
|
|
|
bool operator==( const cvs_iterator & rhs )
|
|
{ return value_path.string() == rhs.value_path.string(); }
|
|
|
|
bool operator!=( const cvs_iterator & rhs )
|
|
{ return value_path.string() != rhs.value_path.string(); }
|
|
|
|
};
|
|
}
|
|
|
|
#endif // include guard
|