<commit_before>#include "joedb/journal/Stream_File.h"
#include "joedb/Exception.h"

namespace joedb
{
 /////////////////////////////////////////////////////////////////////////////
 Input_Stream_File::Input_Stream_File(std::istream &stream):
 /////////////////////////////////////////////////////////////////////////////
  Generic_File(Open_Mode::read_existing),
  stream(stream)
 {
  if (!stream.good())
   throw Exception("!stream.good()");
 }

 /////////////////////////////////////////////////////////////////////////////
 int64_t Input_Stream_File::get_size() const
 /////////////////////////////////////////////////////////////////////////////
 {
  const std::streampos pos = stream.tellg();
  stream.seekg(0, std::ios_base::end);
  const std::streampos result = stream.tellg();
  stream.seekg(pos);
  return int64_t(result);
 }

 /////////////////////////////////////////////////////////////////////////////
 size_t Input_Stream_File::raw_read(char *buffer, size_t size)
 /////////////////////////////////////////////////////////////////////////////
 {
  return size_t(stream.readsome(buffer, std::streamsize(size)));
 }

 /////////////////////////////////////////////////////////////////////////////
 int Input_Stream_File::seek(int64_t offset)
 /////////////////////////////////////////////////////////////////////////////
 {
  stream.seekg(std::streampos(offset));

  int result = 0;
  if (!stream.good())
  {
   stream.clear();
   result = 1;
  }

  return result;
 }

 /////////////////////////////////////////////////////////////////////////////
 Stream_File::Stream_File(std::iostream &stream, Open_Mode mode):
 /////////////////////////////////////////////////////////////////////////////
  Generic_File(mode),
  stream(stream)
 {
  if (!stream.good())
   throw Exception("!stream.good()");
 }

 /////////////////////////////////////////////////////////////////////////////
 int64_t Stream_File::get_size() const
 /////////////////////////////////////////////////////////////////////////////
 {
  const std::streampos pos = stream.tellg();
  stream.seekg(0, std::ios_base::end);
  const std::streampos result = stream.tellg();
  stream.seekg(pos);
  return int64_t(result);
 }

 /////////////////////////////////////////////////////////////////////////////
 size_t Stream_File::raw_read(char *buffer, size_t size)
 /////////////////////////////////////////////////////////////////////////////
 {
  return size_t(stream.readsome(buffer, std::streamsize(size)));
 }

 /////////////////////////////////////////////////////////////////////////////
 void Stream_File::raw_write(const char *buffer, size_t size)
 /////////////////////////////////////////////////////////////////////////////
 {
  stream.write(buffer, std::streamsize(size));
  if (!stream.good())
   throw Exception("Error writing to stream");
 }

 /////////////////////////////////////////////////////////////////////////////<commit_msg>Input_Stream_File: readsome does not work for std::cin. Use read with gcount instead.<commit_after>#include "joedb/journal/Stream_File.h"
#include "joedb/Exception.h"

namespace joedb
{
 /////////////////////////////////////////////////////////////////////////////
 Input_Stream_File::Input_Stream_File(std::istream &stream):
 /////////////////////////////////////////////////////////////////////////////
  Generic_File(Open_Mode::read_existing),
  stream(stream)
 {
  if (!stream.good())
   throw Exception("!stream.good()");
 }

 /////////////////////////////////////////////////////////////////////////////
 int64_t Input_Stream_File::get_size() const
 /////////////////////////////////////////////////////////////////////////////
 {
  const std::streampos pos = stream.tellg();
  stream.seekg(0, std::ios_base::end);
  const std::streampos result = stream.tellg();
  stream.seekg(pos);
  return int64_t(result);
 }

 /////////////////////////////////////////////////////////////////////////////
 size_t Input_Stream_File::raw_read(char *buffer, size_t size)
 /////////////////////////////////////////////////////////////////////////////
 {
  stream.read(buffer, std::streamsize(size));
  return size_t(stream.gcount());
 }

 /////////////////////////////////////////////////////////////////////////////
 int Input_Stream_File::seek(int64_t offset)
 /////////////////////////////////////////////////////////////////////////////
 {
  stream.seekg(std::streampos(offset));

  int result = 0;
  if (!stream.good())
  {
   stream.clear();
   result = 1;
  }

  return result;
 }

 /////////////////////////////////////////////////////////////////////////////
 Stream_File::Stream_File(std::iostream &stream, Open_Mode mode):
 /////////////////////////////////////////////////////////////////////////////
  Generic_File(mode),
  stream(stream)
 {
  if (!stream.good())
   throw Exception("!stream.good()");
 }

 /////////////////////////////////////////////////////////////////////////////
 int64_t Stream_File::get_size() const
 /////////////////////////////////////////////////////////////////////////////
 {
  const std::streampos pos = stream.tellg();
  stream.seekg(0, std::ios_base::end);
  const std::streampos result = stream.tellg();
  stream.seekg(pos);
  return int64_t(result);
 }

 /////////////////////////////////////////////////////////////////////////////
 size_t Stream_File::raw_read(char *buffer, size_t size)
 /////////////////////////////////////////////////////////////////////////////
 {
  stream.read(buffer, std::streamsize(size));
  return size_t(stream.gcount());
 }

 /////////////////////////////////////////////////////////////////////////////
 void Stream_File::raw_write(const char *buffer, size_t size)
 /////////////////////////////////////////////////////////////////////////////
 {
  stream.write(buffer, std::streamsize(size));
  if (!stream.good())
   throw Exception("Error writing to stream");
 }

 /////////////////////////////////////////////////////////////////////////////
{'fraction_non_alphanumeric': 0.5271592442645074, 'fraction_numerical': 0.004723346828609987, 'mean_word_length': 0.8470404984423676, 'pattern_counts': {'":': 0, '<': 3, '<?xml version=': 0, '>': 3, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '1863351', 'n_tokens_mistral': 1260, 'n_tokens_neox': 1213, 'n_words': 215}