15d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// Copyright 2013 The Chromium Authors. All rights reserved.
268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)// found in the LICENSE file.
468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
55d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#ifndef LIBRARIES_NACL_IO_PIPE_PIPE_EVENT_EMITTER_H_
65d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#define LIBRARIES_NACL_IO_PIPE_PIPE_EVENT_EMITTER_H_
768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)#include <poll.h>
968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)#include <stdint.h>
1068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)#include <stdlib.h>
1168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
1268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)#include "nacl_io/fifo_char.h"
135d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "nacl_io/stream/stream_event_emitter.h"
1468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
1568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)#include "sdk_util/auto_lock.h"
1668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)#include "sdk_util/macros.h"
1768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
1868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)namespace nacl_io {
1968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
205d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)class PipeEventEmitter;
215d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)typedef sdk_util::ScopedRef<PipeEventEmitter> ScopedPipeEventEmitter;
2268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
235d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)class PipeEventEmitter : public StreamEventEmitter {
2468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) public:
255d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  PipeEventEmitter(size_t size);
2668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
27cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  Error Read_Locked(char* data, size_t len, int* out_bytes);
28cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  Error Write_Locked(const char* data, size_t len, int* out_bytes);
2968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
304e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) protected:
3168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  virtual FIFOChar* in_fifo() { return &fifo_; }
3268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  virtual FIFOChar* out_fifo() { return &fifo_; }
3368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
344e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) private:
3568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  FIFOChar fifo_;
365d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(PipeEventEmitter);
3768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)};
3868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
3968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)}  // namespace nacl_io
4068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
415d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#endif  // LIBRARIES_NACL_IO_PIPE_PIPE_EVENT_EMITTER_H_
42