Changeset 904:51474cae0459 in roaraudio


Ignore:
Timestamp:
11/28/08 22:23:14 (15 years ago)
Author:
phi
Branch:
default
Phase:
public
Message:

added roar_buffer_shift_out()

Files:
3 edited

Legend:

Unmodified
Added
Removed
  • ChangeLog

    r903 r904  
     1v. 0.1beta4 - ??? 
     2        * added roar_buffer_shift_out() 
     3 
    14v. 0.1beta3 - Thu Nov 27 2008 
    25        * fixed some includes, patch by janus 
  • include/libroar/buffer.h

    r690 r904  
    5353}; 
    5454 
    55 #define roar_buffer_next(a) roar_buffer_delete(*(a), (a)); 
     55#define roar_buffer_next(a) roar_buffer_delete(*(a), (a)) 
    5656 
    5757int roar_buffer_new      (struct roar_buffer ** buf, size_t len); 
     
    6565 
    6666int roar_buffer_set_offset (struct roar_buffer *  buf, size_t off); 
     67 
     68int roar_buffer_shift_out (struct roar_buffer ** buf, void * data, size_t * len); 
    6769 
    6870int roar_buffer_set_meta (struct roar_buffer *  buf, void   *  meta); 
  • libroar/buffer.c

    r690 r904  
    146146} 
    147147 
     148int roar_buffer_shift_out (struct roar_buffer ** buf, void * data, size_t * len) { 
     149 size_t todo, cl; 
     150 struct roar_buffer * cur; 
     151 void * cd; 
     152 
     153 if ( len == NULL || buf == NULL || data == NULL ) 
     154  return -1; 
     155 
     156 if ( *buf == NULL ) 
     157  return -1; 
     158 
     159 todo = *len; 
     160 cur  = *buf; 
     161 
     162 *len = 0; 
     163 
     164 while (todo) { 
     165  ROAR_DBG("roar_buffer_shift_out(*): todo=%u, cur=%p", (unsigned int) todo, cur); 
     166 
     167  if ( roar_buffer_get_len(cur, &cl) == -1 ) 
     168   return -1; 
     169 
     170  if ( cl > todo ) { 
     171   if ( roar_buffer_get_data(cur, &cd) == -1 ) 
     172    return -1; 
     173 
     174   cl = todo; 
     175 
     176   memcpy(data, cd, cl); 
     177   todo -= cl; 
     178   data += cl; 
     179   *len += cl; 
     180 
     181   if ( roar_buffer_set_offset(cur, cl) == -1 ) 
     182    return -1; 
     183  } else { 
     184   if ( roar_buffer_get_data(cur, &cd) == -1 ) 
     185    return -1; 
     186 
     187   memcpy(data, cd, cl); 
     188   todo -= cl; 
     189   data += cl; 
     190   *len += cl; 
     191 
     192   if ( roar_buffer_next(&cur) == -1 ) 
     193    return -1; 
     194  } 
     195 
     196/* 
     197  if ( cur == NULL ) 
     198   break; 
     199*/ 
     200 } 
     201 
     202 *buf = cur; 
     203 
     204 return -1; 
     205} 
     206 
    148207int roar_buffer_set_meta (struct roar_buffer * buf, void *  meta) { 
    149208 if ( buf == NULL ) 
Note: See TracChangeset for help on using the changeset viewer.