#ifndef _INCLUDED_BOBCAT_PIPE_
#define _INCLUDED_BOBCAT_PIPE_

#include <bobcat/errno>

namespace FBB
{
    class Pipe
    {
        protected:
            enum  RW 
            {
                READ, 
                WRITE 
            };
            int d_fd[2];
    
        public:
            Pipe() throw(Errno);

            Pipe(int const *fd);

            int readFd() const
            {
                return d_fd[READ];
            }
            int writeFd() const
            {
                return d_fd[WRITE];
            }

            int getReadFd() const       // DEPRECATED: USE readFd()
            {
                return d_fd[READ];
            }
            int getWriteFd() const      // DEPRECATED: USE writeFd()
            {
                return d_fd[WRITE];
            }

            void readFrom(int filedescriptor);   

            // experimental:
            void readFrom(int const *filedescriptor, size_t n);

            int readOnly();

            void writtenBy(int filedescriptor);

            void writtenBy(int const *filedescriptor, size_t n = 2);

            int writeOnly();
    };
}

#endif
