Add binary reading and by-line reading to filerd
This commit is contained in:
parent
8a4cae1ccf
commit
cfe4d67bff
@ -40,6 +40,8 @@ namespace raii{
|
||||
constexpr binary_base(void) = default;
|
||||
constexpr binary_base(char* data, size_t size):
|
||||
m_data(data), m_cap(size){}
|
||||
constexpr binary_base(char* data, size_t cap, size_t size):
|
||||
m_data(data), m_size(size), m_cap(cap){}
|
||||
template<class Allocator>
|
||||
binary_base(const binary_base& b):
|
||||
m_data(Allocator::copy(b.m_data, b.m_cap)),
|
||||
@ -70,6 +72,8 @@ namespace raii{
|
||||
constexpr binary_data(void) = default;
|
||||
binary_data(char* data, size_t size):
|
||||
binary_base(reinterpret_cast<char*>(Allocator::copy(data, size)), size){}
|
||||
binary_data(char* data, size_t cap, size_t size):
|
||||
binary_base(reinterpret_cast<char*>(Allocator::copy(data, size)), cap, size){}
|
||||
binary_data(size_t size):
|
||||
binary_base(reinterpret_cast<char*>(Allocator::allocate(size)), size){}
|
||||
binary_data(const binary_data& b):
|
||||
|
||||
@ -23,6 +23,7 @@
|
||||
#include <cstddef> //size_t
|
||||
|
||||
#include "raii/string.hpp"
|
||||
#include "raii/binary.hpp"
|
||||
|
||||
namespace raii{
|
||||
|
||||
@ -55,6 +56,8 @@ namespace raii{
|
||||
|
||||
size_t read(char* dest, size_t bytes);
|
||||
raii::string read(size_t bytes);
|
||||
raii::string readln(size_t max = 0);
|
||||
raii::binary read_bin(size_t bytes);
|
||||
|
||||
size_t write(const char* c, size_t bytes);
|
||||
size_t write(const raii::string_base&);
|
||||
|
||||
@ -85,6 +85,22 @@ namespace raii{
|
||||
size_t written = read(tmp, bytes);
|
||||
return raii::string(tmp, written);
|
||||
}
|
||||
raii::string filerd::readln(size_t max){
|
||||
raii::string ret;
|
||||
char c;
|
||||
size_t count = 0;
|
||||
for(c = fgetc(m_fp);c != EOF && c != '\n';c = fgetc(m_fp)){
|
||||
ret.append(&c, 1);
|
||||
if(++count == max)
|
||||
break;
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
raii::binary filerd::read_bin(size_t bytes){
|
||||
char* tmp = reinterpret_cast<char*>(raii::binary::allocator_type::allocate(bytes));
|
||||
size_t written = read(tmp, bytes);
|
||||
return raii::binary(tmp, written, written);
|
||||
}
|
||||
size_t filerd::write(const char* c, size_t bytes){
|
||||
return fwrite(c, 1, bytes, m_fp);
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user