Usermode/libc - Fix strchr and strrchr behavior
[tpg/acess2.git] / KernelLand / Kernel / include / adt.h
1 /* 
2  * Acess2
3  * - Abstract Data Types
4  */
5 #ifndef _ADT_H_
6 #define _ADT_H_
7
8 /**
9  * \name Ring Buffers
10  * \{
11  */
12 typedef struct sRingBuffer
13 {
14         size_t  Start;  //!< Start of data in ring buffer
15         size_t  Length; //!< Number of data bytes in buffer
16         size_t  Space;  //!< Allocated space in buffer
17         tShortSpinlock  Lock;   //!< Lock to prevent collisions
18         char    Data[]; //!< Buffer
19 }       tRingBuffer;
20
21 /**
22  * \brief Create a ring buffer \a Space bytes large
23  * \param Space Ammount of space to allocate within the buffer
24  * \return Pointer to the buffer structure
25  */
26 extern tRingBuffer      *RingBuffer_Create(size_t Space);
27
28 /**
29  * \brief Free a ring buffer
30  */
31 extern void     RingBuffer_Free(tRingBuffer *Buffer);
32
33 /**
34  * \brief Read at most \a Length bytes from the buffer
35  * \param Dest  Destinaton buffer
36  * \param Buffer        Source ring buffer
37  * \param Length        Requested number of bytes
38  * \return Number of bytes read
39  */
40 extern size_t   RingBuffer_Read(void *Dest, tRingBuffer *Buffer, size_t Length);
41 /**
42  * \brief Write at most \a Length bytes to the buffer
43  * \param Buffer        Destination ring buffer
44  * \param Source        Source buffer
45  * \param Length        Provided number of bytes
46  * \return Number of bytes written
47  */
48 extern size_t   RingBuffer_Write(tRingBuffer *Buffer, const void *Source, size_t Length);
49 /**
50  * \}
51  */
52
53
54 #endif

UCC git Repository :: git.ucc.asn.au