basix_doc 0.1
file_port_rep Class Reference
Inheritance diagram for file_port_rep:
posix_port_rep port_rep rep_struct

List of all members.

Public Member Functions

Public Attributes

Protected Attributes


Detailed Description

Definition at line 24 of file file_port.cpp.


Constructor & Destructor Documentation

file_port_rep ( int  kind,
FILE *  f2,
bool  cf2,
const string name2 
) [inline]

Definition at line 62 of file file_port.cpp.

                                                                          :
    posix_port_rep (kind, fileno (f2)),
    f (f2), cf (cf2), name (name2), next (-1) {}
~file_port_rep ( ) [inline]

Definition at line 65 of file file_port.cpp.

                           {
    if (cf) fclose (f); }

Member Function Documentation

port accept ( ) [virtual, inherited]

Reimplemented in socket_port_rep.

Definition at line 87 of file port.cpp.

References ERROR, port_rep::expression(), mmx::lf, and mmx::mmerr.

                  {
  mmerr << "port= " << expression () << lf;
  ERROR ("socket server port expected");
}
bool busy ( ) [inline, virtual]

Reimplemented from posix_port_rep.

Definition at line 37 of file file_port.cpp.

References file_port_rep::can_read(), and posix_port_rep::kind.

               {
    if (this->kind == 2) return can_read () > 0;
    return true;
  }
nat can_read ( ) [inline, virtual]

Reimplemented from posix_port_rep.

Definition at line 45 of file file_port.cpp.

References posix_port_rep::kind.

Referenced by file_port_rep::busy().

                  {
    if (next != -1) return 1;
    if (this->kind == 1 || feof (f) != 0) return 0;
    next= fgetc (f);
    if (next != -1) return 1;
    return 0;
  }
nat can_write ( ) [inline, virtual]

Reimplemented from posix_port_rep.

Definition at line 41 of file file_port.cpp.

References posix_port_rep::kind.

                   {
    if (this->kind == 2) return 0;
    return (nat) (-1);
  }
port component ( const string name) [virtual, inherited]

Reimplemented in composite_port_rep, and formatting_port_rep.

Definition at line 93 of file port.cpp.

References ERROR, port_rep::expression(), mmx::lf, and mmx::mmerr.

                                       {
  mmerr << "port= " << expression () << lf;
  ERROR ("composite port expected");
}
bool error_flag ( ) [virtual, inherited]

Reimplemented in composite_port_rep, formatting_port_rep, and error_port_rep.

Definition at line 38 of file port.cpp.

                      {
  return false;
}
string error_message ( ) [virtual, inherited]

Reimplemented in composite_port_rep, formatting_port_rep, and error_port_rep.

Definition at line 43 of file port.cpp.

                         {
  return "";
}
syntactic expression ( ) const [inline, virtual]

Implements port_rep.

Definition at line 31 of file file_port.cpp.

References posix_port_rep::kind, and mmx::syn().

                                {
    if (this->kind == 1) return syn ("output_file_port", syntactic (name));
    if (this->kind == 2) return syn ("input_file_port", syntactic (name));
    return syn ("input_output_file_port", syntactic (name));
  }
void feed ( ) [virtual, inherited]

Reimplemented in socket_port_rep.

Definition at line 62 of file posix_port.cpp.

References posix_port_rep::alive, posix_port_rep::buffer, ERROR, posix_port_rep::fd, posix_port_rep::read(), and posix_port_rep::wait().

Referenced by posix_port_rep::busy(), posix_port_rep::can_read(), and posix_port_rep::read().

                      {
  while (alive && wait (0)) {
    int r;
    char tempout[1024];
    r = ::read (fd, tempout, 1024);
    if (r == -1) {
      ::wait (NULL);
      ERROR ("read failed");
    }
    else if (r == 0) alive= false;
    else buffer << string (tempout, r);
  }
}
void flush ( ) [inline, virtual]

Reimplemented from port_rep.

Definition at line 59 of file file_port.cpp.

{ fflush (f); }
void format ( const print_format fm) [virtual, inherited]

Reimplemented in formatting_port_rep.

Definition at line 99 of file port.cpp.

References ERROR, port_rep::expression(), mmx::lf, and mmx::mmerr.

                                        {
  mmerr << "port= " << expression () << lf;
  ERROR ("formatting port expected");  
}
virtual bool is_input_port ( ) [inline, virtual, inherited]

Reimplemented from port_rep.

Definition at line 40 of file posix_port.hpp.

References posix_port_rep::kind.

{ return (kind & 2) != 0; }
virtual bool is_output_port ( ) [inline, virtual, inherited]

Reimplemented from port_rep.

Definition at line 39 of file posix_port.hpp.

References posix_port_rep::kind.

{ return (kind & 1) != 0; }
void read ( char *  s,
nat  n 
) [inline, virtual]

Reimplemented from posix_port_rep.

Definition at line 55 of file file_port.cpp.

References n.

                             {
    if (next != -1 && n > 0) { s[0]= next; s++; n--; next= -1; }
    for (nat i=0; i<n; i++) s[i]= fgetc (f); }
void send ( const char *  s,
nat  n 
) [virtual, inherited]

Reimplemented in socket_port_rep.

Definition at line 54 of file posix_port.cpp.

References posix_port_rep::alive, posix_port_rep::fd, n, s, and posix_port_rep::write().

Referenced by posix_port_rep::write().

                                          {
  if (alive) {
    int err= ::write (fd, s, n);
    (void) err;
  }
}
bool wait ( int  msecs) [virtual, inherited]

Reimplemented from port_rep.

Definition at line 77 of file posix_port.cpp.

References posix_port_rep::alive, posix_port_rep::fd, and posix_port_rep::kind.

Referenced by socket_port_rep::accept(), socket_port_rep::feed(), and posix_port_rep::feed().

                               {
  //mmout << "Wait " << msecs << " ms on " << expression () << "\n";
  if ((kind & 2) == 0 || !alive) return false;
  fd_set in_fds;
  FD_ZERO (&in_fds);
  FD_SET (fd, &in_fds);
  
  nat nr;
  struct timeval tv;
  tv.tv_sec  = msecs / 1000;
  tv.tv_usec = 1000 * (msecs % 1000);
  if (msecs < 0) nr= select (fd + 1, &in_fds, NULL, NULL, NULL);
  else nr= select (fd + 1, &in_fds, NULL, NULL, &tv);
  //mmout << "Received " << nr << " on " << fd << "\n";
  return nr > 0;
}
void write ( const char *  s,
nat  n 
) [inline, virtual]

Reimplemented from posix_port_rep.

Definition at line 53 of file file_port.cpp.

References n.

                                    {
    for (nat i=0; i<n; i++) fputc (s[i], f); }

Member Data Documentation

nat pos [protected, inherited]
MMX_ALLOCATORS int ref_count [inherited]

Definition at line 138 of file basix.hpp.


The documentation for this class was generated from the following file:
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines