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)#include "nacl_io/pipe/pipe_event_emitter.h"
668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
75d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include <algorithm>
868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)namespace nacl_io {
1068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
115d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)PipeEventEmitter::PipeEventEmitter(size_t size)
1268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)    : fifo_(std::max<size_t>(1, size)) {
1368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  UpdateStatus_Locked();
1468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)}
1568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
16cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)Error PipeEventEmitter::Read_Locked(char* data, size_t len, int* out_bytes) {
17cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  *out_bytes = fifo_.Read(data, len);
1868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
1968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  UpdateStatus_Locked();
20cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  return 0;
2168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)}
2268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
2346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)Error PipeEventEmitter::Write_Locked(const char* data,
2446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)                                     size_t len,
25cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)                                     int* out_bytes) {
26cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  *out_bytes = fifo_.Write(data, len);
2768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
2868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  UpdateStatus_Locked();
29cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  return 0;
3068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)}
3168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
3268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)}  // namespace nacl_io
33