• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright (c) 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4 
5 #ifndef CRAZY_LINKER_LINE_READER_H
6 #define CRAZY_LINKER_LINE_READER_H
7 
8 #include <string.h>
9 
10 #include "crazy_linker_system.h"
11 
12 namespace crazy {
13 
14 // A class used to read text files line-by-line.
15 // Usage:
16 //    LineReader reader("/path/to/file");
17 //    while (reader.GetNextLine()) {
18 //       const char* line = reader.line();
19 //       size_t line_len = reader.length();
20 //       ... line is not necessarily zero-terminated.
21 //    }
22 
23 class LineReader {
24  public:
25   LineReader();
26   explicit LineReader(const char* path);
27   ~LineReader();
28 
29   // Open a new file for testing. Doesn't fail. If there was an error
30   // opening the file, GetNextLine() will simply return false.
31   void Open(const char* file_path);
32 
33   // Grab next line. Returns true on success, or false otherwise.
34   bool GetNextLine();
35 
36   // Return the start of the current line, this is _not_ zero-terminated
37   // and always contains a final newline (\n).
38   // Only call this after a successful GetNextLine().
39   const char* line() const;
40 
41   // Return the line length, this includes the final \n.
42   // Only call this after a successful GetNextLine().
43   size_t length() const;
44 
45  private:
46   void Reset();
47 
48   FileDescriptor fd_;
49   bool eof_;
50   size_t line_start_;
51   size_t line_len_;
52   size_t buff_size_;
53   size_t buff_capacity_;
54   char* buff_;
55   char buff0_[128];
56 };
57 
58 }  // namespace crazy
59 
60 #endif  // CRAZY_LINKER_LINE_READER_H
61