57inline void file_put_contents(
void const* buf,
size_t sz,
const char *filename,
const char* access=
"wb")
59 detail::ScopedFILE f(filename, access);
60 size_t written = std::fwrite(buf, 1, sz, f.file);
61 if(C4_UNLIKELY(written != sz))
62 _RYML_ERR_BASIC(
"{}: failed file write: expected={}B actual={}B", filename, sz, written);
132 using value_type =
typename ContiguousContainer::value_type;
133 using size_type =
typename ContiguousContainer::size_type;
134 detail::ScopedFILE f(filename, access);
135 void * dat = !v->empty() ? &(*v)[0] :
nullptr;
136 size_t vsz =
static_cast<size_t>(v->size());
138 size_t num_elms = fsz /
sizeof(value_type);
139 if(C4_UNLIKELY(fsz != num_elms *
sizeof(value_type)))
140 _RYML_ERR_BASIC(
"{}: file size ({}B) not a multiple of element size ({}B)", filename, fsz,
sizeof(value_type));
141 v->resize(
static_cast<size_type
>(num_elms));
142 if(fsz > vsz *
sizeof(value_type))
180 using I =
typename ContiguousContainer::size_type;
181 using T =
typename ContiguousContainer::value_type;
185 I elmsz =
static_cast<I
>(
sizeof(T));
186 I sz = (num_bytes + elmsz - 1) / elmsz;
187 num_bytes = sz * elmsz;
189 unsigned char *buf =
reinterpret_cast<unsigned char*
>(&(*cont)[0]);
190 while((c = fgetc(f)) != EOF)
194 num_bytes = 2 * num_bytes;
195 if(num_bytes %
sizeof(T))
goto errsize;
196 cont->resize(num_bytes /
sizeof(T));
197 buf =
reinterpret_cast<unsigned char*
>(&(*cont)[0]);
199 buf[pos++] =
static_cast<unsigned char>(c);
203 cont->resize(pos /
sizeof(T));
206 _RYML_ERR_BASIC(
"file size is not multiple of element size");
void file_get_contents(const char *filename, FILE *fp, size_t filesz, void *buf, size_t bufsz)
load a file of specified size from disk into an existing contiguous buffer.
void file_put_contents(void const *buf, size_t sz, const char *filename, const char *access="wb")
save a contiguous buffer into a file
void stdin_get_contents(ContiguousContainer *cont, FILE *f=stdin)
load a file from stdin (or similar stream-like file) and return a newly created ContiguousContainer w...