1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
|
/* Copyright (c) 2015 The Chromium OS Authors. All rights reserved.
* Use of this source code is governed by a BSD-style license that can be
* found in the LICENSE file.
*
* Consumer methods
*/
#include "consumer.h"
#include "producer.h"
void consumer_notify_directly(struct consumer const *consumer, size_t count)
{
if (count && consumer->ops->written)
consumer->ops->written(consumer, count);
}
size_t consumer_read_unit(struct consumer const *consumer, void *unit)
{
size_t removed = queue_remove_unit(consumer->queue, unit);
producer_notify_directly(consumer->producer, removed);
return removed;
}
size_t consumer_read_memcpy(struct consumer const *consumer,
void *units,
size_t count,
void *(*memcpy)(void *dest,
void const *src,
size_t n))
{
size_t removed = queue_remove_memcpy(consumer->queue,
units,
count,
memcpy);
producer_notify_directly(consumer->producer, removed);
return removed;
}
|