8 #ifndef Sawyer_Container_LineVector_H
9 #define Sawyer_Container_LineVector_H
11 #include <Sawyer/Buffer.h>
12 #include <Sawyer/Sawyer.h>
15 #include <boost/filesystem.hpp>
28 mutable std::vector<size_t> lineFeeds_;
29 mutable size_t nextCharToScan_;
33 LineVector(): charBuf_(NULL), bufSize_(0), nextCharToScan_(0) {}
38 explicit LineVector(
const boost::filesystem::path&);
47 void load(
const boost::filesystem::path&);
53 void load(
size_t nBytes,
const char *buf);
89 return charIdx >=
nCharacters() ? EOF : (int)charBuf_[charIdx];
104 int character(
size_t lineIdx,
size_t colIdx)
const;
112 const char*
lineChars(
size_t lineIdx)
const;
132 size_t lineIndex(
size_t charIndex)
const;
137 std::pair<size_t, size_t>
location(
size_t charIndex)
const;
154 void cacheLines(
size_t nLines)
const;
int character(size_t charIdx) const
Character at file offset.
A buffer of characters indexed by line number.
size_t characterIndex(size_t lineIdx) const
Character index for start of line.
const char * lineChars(size_t lineIdx) const
Characters for a line.
std::pair< size_t, size_t > location(size_t charIndex) const
Convert a character index to a line and column index.
size_t lineIndex(size_t charIndex) const
Convert a character index to a line index.
bool isLastLineTerminated() const
Determines whether the file ends with line termination.
void load(const boost::filesystem::path &)
(Re)load a line vector from a file.
std::string lineString(size_t lineIdx) const
Line as a string.
size_t nCharacters() const
Number of characters.
LineVector()
Constructor that creates an empty line vector.
Name space for the entire library.
SharedPointer< Buffer > Ptr
Reference counting smart pointer.
Base class for all buffers.
size_t nLines() const
Number of lines.
bool isEmpty() const
Determines whether the file is empty.
std::string contentAsString(size_t begin, size_t end) const
Returns part of the buffer as a string.
const char * characters(size_t charIdx) const
Characters at file offset.