Skip to content

Commit cf5b501

Browse files
Aditya Shastrifacebook-github-bot
authored andcommitted
Add eof() function to reader APIs (#105)
Summary: Pull Request resolved: #105 We need to know whether the underlying source has any more data, otherwise we won't know whether to stop reading Reviewed By: elliottlawrence Differential Revision: D34967134 fbshipit-source-id: 8ac2f71747e534a63f75cac8e30aaf599922cab6
1 parent f8863c8 commit cf5b501

9 files changed

Lines changed: 26 additions & 0 deletions

File tree

fbpcf/io/api/CloudFileReader.cpp

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,9 @@ int CloudFileReader::close() {
2020
size_t CloudFileReader::read(std::vector<char>& /* buf */) {
2121
return 0;
2222
}
23+
bool CloudFileReader::eof() {
24+
return false;
25+
}
2326

2427
CloudFileReader::~CloudFileReader() {
2528
close();

fbpcf/io/api/CloudFileReader.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ class CloudFileReader : public IReaderCloser {
2424

2525
int close() override;
2626
size_t read(std::vector<char>& buf) override;
27+
bool eof() override;
2728
~CloudFileReader() override;
2829
};
2930

fbpcf/io/api/FileReader.cpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,10 @@ size_t FileReader::read(std::vector<char>& buf) {
3232
return childReader_->read(buf);
3333
}
3434

35+
bool FileReader::eof() {
36+
return childReader_->eof();
37+
}
38+
3539
int FileReader::close() {
3640
return childReader_->close();
3741
}

fbpcf/io/api/FileReader.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ class FileReader : public IReaderCloser {
2727

2828
int close() override;
2929
size_t read(std::vector<char>& buf) override;
30+
bool eof() override;
3031
~FileReader() override;
3132

3233
private:

fbpcf/io/api/IReader.h

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,11 @@ class IReader {
2525
* read
2626
*/
2727
virtual size_t read(std::vector<char>& buf) = 0;
28+
/*
29+
* eof() returns whether there is any more
30+
* data left in the file
31+
*/
32+
virtual bool eof() = 0;
2833
virtual ~IReader() = default;
2934
};
3035

fbpcf/io/api/LocalFileReader.cpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,10 @@ size_t LocalFileReader::read(std::vector<char>& buf) {
3737
return inputStream_->gcount();
3838
}
3939

40+
bool LocalFileReader::eof() {
41+
return inputStream_->eof();
42+
}
43+
4044
LocalFileReader::~LocalFileReader() {
4145
close();
4246
}

fbpcf/io/api/LocalFileReader.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ class LocalFileReader : public IReaderCloser {
2727

2828
int close() override;
2929
size_t read(std::vector<char>& buf) override;
30+
bool eof() override;
3031
~LocalFileReader() override;
3132

3233
private:

fbpcf/io/api/SocketReader.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ class SocketReader : public IReaderCloser {
3434

3535
int close() override;
3636
size_t read(std::vector<char>& buf) override;
37+
bool eof() override;
3738
~SocketReader() override;
3839
};
3940

fbpcf/io/api/test/LocalFileReaderTest.cpp

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,8 @@ TEST(LocalFileReaderTest, testReadingFromFile) {
1818
IOTestHelper::getBaseDirFromPath(__FILE__) +
1919
"data/local_file_reader_test_file.txt");
2020

21+
EXPECT_FALSE(reader->eof());
22+
2123
/*
2224
CASE 1A
2325
Buffer of size 20, read 20 bytes
@@ -27,6 +29,7 @@ TEST(LocalFileReaderTest, testReadingFromFile) {
2729

2830
EXPECT_EQ(nBytes, 20);
2931
IOTestHelper::expectBufferToEqualString(buf, "this is a test file\n", 20);
32+
EXPECT_FALSE(reader->eof());
3033

3134
/*
3235
CASE 1B
@@ -37,6 +40,7 @@ TEST(LocalFileReaderTest, testReadingFromFile) {
3740
EXPECT_EQ(nBytes, 25);
3841
IOTestHelper::expectBufferToEqualString(
3942
buf2, "it has many lines in it\n\n", 25);
43+
EXPECT_FALSE(reader->eof());
4044

4145
/*
4246
CASE 2
@@ -51,6 +55,8 @@ TEST(LocalFileReaderTest, testReadingFromFile) {
5155
IOTestHelper::expectBufferToEqualString(
5256
buf3, "the quick brown fox jumped over the lazy dog\n", 45);
5357

58+
EXPECT_TRUE(reader->eof());
59+
5460
EXPECT_THROW(reader->read(buf3), std::runtime_error);
5561
}
5662

0 commit comments

Comments
 (0)