/usr/include/boost/iostreams/filter/grep.hpp is in libboost1.55-dev 1.55.0+dfsg-3.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 | /*
* 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.)
*
* See http://www.boost.org/libs/iostreams for documentation.
* File: boost/iostreams/filter/grep.hpp
* Date: Mon May 26 17:48:45 MDT 2008
* Copyright: 2008 CodeRage, LLC
* Author: Jonathan Turkanis
* Contact: turkanis at coderage dot com
*
* Defines the class template basic_grep_filter and its specializations
* grep_filter and wgrep_filter.
*/
#ifndef BOOST_IOSTREAMS_GREP_FILTER_HPP_INCLUDED
#define BOOST_IOSTREAMS_GREP_FILTER_HPP_INCLUDED
#if defined(_MSC_VER) && (_MSC_VER >= 1020)
# pragma once
#endif
#include <iostream>
#include <memory> // allocator.
#include <boost/iostreams/char_traits.hpp>
#include <boost/iostreams/filter/line.hpp>
#include <boost/iostreams/pipeline.hpp>
#include <boost/regex.hpp>
namespace boost { namespace iostreams {
namespace grep {
const int invert = 1;
const int whole_line = invert << 1;
} // End namespace grep.
template< typename Ch,
typename Tr = regex_traits<Ch>,
typename Alloc = std::allocator<Ch> >
class basic_grep_filter : public basic_line_filter<Ch, Alloc> {
private:
typedef basic_line_filter<Ch, Alloc> base_type;
public:
typedef typename base_type::char_type char_type;
typedef typename base_type::category category;
typedef char_traits<char_type> traits_type;
typedef typename base_type::string_type string_type;
typedef basic_regex<Ch, Tr> regex_type;
typedef regex_constants::match_flag_type match_flag_type;
basic_grep_filter( const regex_type& re,
match_flag_type match_flags =
regex_constants::match_default,
int options = 0 );
int count() const { return count_; }
template<typename Sink>
void close(Sink& snk, BOOST_IOS::openmode which)
{
base_type::close(snk, which);
options_ &= ~f_initialized;
}
private:
virtual string_type do_filter(const string_type& line)
{
if ((options_ & f_initialized) == 0) {
options_ |= f_initialized;
count_ = 0;
}
bool matches = (options_ & grep::whole_line) ?
regex_match(line, re_, match_flags_) :
regex_search(line, re_, match_flags_);
if (options_ & grep::invert)
matches = !matches;
if (matches)
++count_;
return matches ? line + traits_type::newline() : string_type();
}
// Private flags bitwise OR'd with constants from namespace grep
enum flags_ {
f_initialized = 65536
};
regex_type re_;
match_flag_type match_flags_;
int options_;
int count_;
};
BOOST_IOSTREAMS_PIPABLE(basic_grep_filter, 3)
typedef basic_grep_filter<char> grep_filter;
typedef basic_grep_filter<wchar_t> wgrep_filter;
//------------------Implementation of basic_grep_filter-----------------------//
template<typename Ch, typename Tr, typename Alloc>
basic_grep_filter<Ch, Tr, Alloc>::basic_grep_filter
(const regex_type& re, match_flag_type match_flags, int options)
: base_type(true), re_(re), match_flags_(match_flags),
options_(options), count_(0)
{ }
} } // End namespaces iostreams, boost.
#endif // #ifndef BOOST_IOSTREAMS_REGEX_FILTER_HPP_INCLUDED
|