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;
151 void cacheLines(
size_t nLines)
const;
bool isEmpty() const
Determines whether the file is empty.
size_t nCharacters() const
Number of characters.
size_t nLines() const
Number of lines.
SharedPointer< Buffer > Ptr
Reference counting smart pointer.
A buffer of characters indexed by line number.
const char * characters(size_t charIdx) const
Characters at file offset.
std::string lineString(size_t lineIdx) const
Line as a string.
int character(size_t charIdx) const
Character at file offset.
bool isLastLineTerminated() const
Determines whether the file ends with line termination.
LineVector()
Constructor that creates an empty line vector.
Base class for all buffers.
Name space for the entire library.
size_t characterIndex(size_t lineIdx) const
Character index for start of line.
void load(const boost::filesystem::path &)
(Re)load a line vector from a file.
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.