| Server IP : 217.160.0.135 / Your IP : 216.73.216.114 Web Server : Apache System : Linux www 6.18.52-i1-ampere #1203 SMP Mon Sep 14 18:29:59 CEST 2026 aarch64 User : sws1074145052 ( 1074145052) PHP Version : 8.3.32 Disable Function : NONE MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : OFF | Sudo : OFF | Pkexec : OFF Directory : /lib/python3/dist-packages/pythran/pythonic/include/types/ |
Upload File : |
#ifndef PYTHONIC_INCLUDE_TYPES_FILE_HPP
#define PYTHONIC_INCLUDE_TYPES_FILE_HPP
#include "pythonic/include/types/assignable.hpp"
#include "pythonic/include/utils/shared_ref.hpp"
#include "pythonic/include/types/str.hpp"
#include "pythonic/include/types/list.hpp"
#include "pythonic/include/types/NoneType.hpp"
#include "pythonic/include/types/attr.hpp"
#include <fstream>
#include <iterator>
#include <string>
PYTHONIC_NS_BEGIN
namespace types
{
class file;
struct file_iterator
: std::iterator<std::forward_iterator_tag, types::str, ptrdiff_t,
types::str *, types::str /* no ref */> {
private:
file *f;
mutable bool set;
mutable types::str curr;
long position;
public:
using value_type = types::str;
file_iterator(file &ref);
file_iterator();
bool operator==(file_iterator const &f2) const;
bool operator!=(file_iterator const &f2) const;
bool operator<(file_iterator const &f2) const;
file_iterator &operator++();
types::str operator*() const;
};
struct _file {
FILE *f;
_file();
_file(types::str const &filename, types::str const &strmode = "r");
FILE *operator*() const;
~_file();
};
class file : public file_iterator
{
private:
using container_type = _file;
utils::shared_ref<container_type> data;
bool is_open;
types::str mode, name, newlines;
public:
// Types
using iterator = file_iterator;
using value_type = types::str;
// Constructors
file();
file(types::str const &filename, types::str const &strmode = "r");
// Iterators
iterator begin();
iterator end();
// Modifiers
void open(types::str const &filename, types::str const &strmode);
void close();
bool closed() const;
types::str const &getmode() const;
types::str const &getname() const;
types::str const &getnewlines() const;
bool eof();
void flush();
long fileno() const;
bool isatty() const;
types::str read(long size = -1);
types::str readline(long size = std::numeric_limits<long>::max());
types::list<types::str> readlines(long sizehint = -1);
void seek(long offset, long whence = SEEK_SET);
long tell() const;
void truncate(long size = -1);
long write(types::str const &str);
template <class T>
void writelines(T const &seq);
};
}
PYTHONIC_NS_END
/* pythran attribute system { */
PYTHONIC_NS_BEGIN
namespace builtins
{
bool getattr(types::attr::CLOSED, types::file const &f);
types::str const &getattr(types::attr::MODE, types::file const &f);
types::str const &getattr(types::attr::NAME, types::file const &f);
// Python seems to always return none... Doing the same.
types::none_type getattr(types::attr::NEWLINES, types::file const &f);
}
PYTHONIC_NS_END
/* } */
#endif