MCPcopy Create free account
hub / github.com/MikeMirzayanov/testlib / BufferedFileInputStreamReader

Class BufferedFileInputStreamReader

testlib.h:1868–1987  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1866};
1867
1868class BufferedFileInputStreamReader : public InputStreamReader {
1869private:
1870 static const size_t BUFFER_SIZE;
1871 static const size_t MAX_UNREAD_COUNT;
1872
1873 std::FILE *file;
1874 std::string name;
1875 int line;
1876
1877 char *buffer;
1878 bool *isEof;
1879 int bufferPos;
1880 size_t bufferSize;
1881
1882 bool refill() {
1883 if (NULL == file)
1884 __testlib_fail("BufferedFileInputStreamReader: file == NULL (" + getName() + ")");
1885
1886 if (bufferPos >= int(bufferSize)) {
1887 size_t readSize = fread(
1888 buffer + MAX_UNREAD_COUNT,
1889 1,
1890 BUFFER_SIZE - MAX_UNREAD_COUNT,
1891 file
1892 );
1893
1894 if (readSize < BUFFER_SIZE - MAX_UNREAD_COUNT
1895 && ferror(file))
1896 __testlib_fail("BufferedFileInputStreamReader: unable to read (" + getName() + ")");
1897
1898 bufferSize = MAX_UNREAD_COUNT + readSize;
1899 bufferPos = int(MAX_UNREAD_COUNT);
1900 std::memset(isEof + MAX_UNREAD_COUNT, 0, sizeof(isEof[0]) * readSize);
1901
1902 return readSize > 0;
1903 } else
1904 return true;
1905 }
1906
1907 char increment() {
1908 char c;
1909 if ((c = buffer[bufferPos++]) == LF)
1910 line++;
1911 return c;
1912 }
1913
1914public:
1915 BufferedFileInputStreamReader(std::FILE *file, const std::string &name) : file(file), name(name), line(1) {
1916 buffer = new char[BUFFER_SIZE];
1917 isEof = new bool[BUFFER_SIZE];
1918 bufferSize = MAX_UNREAD_COUNT;
1919 bufferPos = int(MAX_UNREAD_COUNT);
1920 }
1921
1922 ~BufferedFileInputStreamReader() {
1923 if (NULL != buffer) {
1924 delete[] buffer;
1925 buffer = NULL;

Callers

nothing calls this directly

Calls

no outgoing calls

Tested by

no test coverage detected