Changeset b6b39fc7383c59824010dffec2e64aa60a11a4b8

Show
Ignore:
Timestamp:
10/21/08 22:45:49 (5 years ago)
Author:
George Schlossnagle <george@omniti.com>
git-committer:
George Schlossnagle <george@omniti.com> 1224629149 +0000
git-parent:

[b171bfa344c38c32f4b40fb679066b871ed8ff9a]

git-author:
George Schlossnagle <george@omniti.com> 1224629149 +0000
Message:

add function to advance and id. This allows for advancement
outside of one's current segment.

add support for this to the perl api

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • jlog.c

    radf2ee8 rb6b39fc  
    14431443} 
    14441444 
     1445int jlog_ctx_advance_id(jlog_ctx *ctx, jlog_id *cur,  
     1446                        jlog_id *start, jlog_id *finish) 
     1447{ 
     1448  int rv; 
     1449  if(memcmp(cur, finish, sizeof(jlog_id))) { 
     1450    start->marker++; 
     1451  } else { 
     1452    if((rv = __jlog_find_first_log_after(ctx, cur, start, finish)) != 0) { 
     1453      return rv; 
     1454    } 
     1455    if(cur->log != start->log) start->marker = 1; 
     1456    else start->marker = cur->marker; 
     1457  } 
     1458  return 0; 
     1459} 
     1460 
    14451461/* vim:se ts=2 sw=2 et: */ 
  • jlog.h

    radf2ee8 rb6b39fc  
    151151JLOG_API(int)       __jlog_pending_readers(jlog_ctx *ctx, u_int32_t log); 
    152152JLOG_API(int)       jlog_ctx_last_log_id(jlog_ctx *ctx, jlog_id *id); 
     153JLOG_API(int)       jlog_ctx_advance_id(jlog_ctx *ctx, jlog_id *cur,  
     154                                        jlog_id *start, jlog_id *finish); 
     155 
    153156 
    154157#endif 
  • perl/JLog.xs

    rb171bfa rb6b39fc  
    198198    } 
    199199 
     200SV* JLOG_inspect(my_obj) 
     201  JLog my_obj; 
     202  CODE: 
     203    { 
     204      HV *rh; 
     205      char start[20], last[20], prev[20], end[20]; 
     206      rh = (HV *)sv_2mortal((SV *)newHV()); 
     207      jlog_snprint_logid(start, sizeof(start), &my_obj->start); 
     208      hv_store(rh, "start", sizeof("start") - 1, newSVpv(start, 0), 0); 
     209 
     210      jlog_snprint_logid(last, sizeof(last), &my_obj->last); 
     211      hv_store(rh, "last", sizeof("last") - 1, newSVpv(last, 0), 0); 
     212 
     213      jlog_snprint_logid(prev, sizeof(prev), &my_obj->prev); 
     214      hv_store(rh, "prev", sizeof("prev") - 1, newSVpv(prev, 0), 0); 
     215 
     216      jlog_snprint_logid(end, sizeof(end), &my_obj->end); 
     217      hv_store(rh, "end", sizeof("end") - 1, newSVpv(end, 0), 0); 
     218 
     219      hv_store(rh, "path", sizeof("path") - 1, newSVpv(my_obj->path, 0), 0); 
     220      RETVAL = newRV((SV *)rh); 
     221    } 
     222  OUTPUT: 
     223    RETVAL 
     224 
    200225void JLOG_DESTROY(my_obj) 
    201226  JLog my_obj; 
     
    308333      } else { 
    309334        /* if we've already read the end, return; otherwise advance */ 
    310         if (!memcmp(&my_obj->last, &my_obj->end, sizeof(jlog_id))) { 
     335        cur = my_obj->last; 
     336        if(!memcmp(&my_obj->prev, &my_obj->end, sizeof(jlog_id))) { 
    311337          my_obj->start = epoch; 
    312338          my_obj->end = epoch; 
    313339          RETVAL = &PL_sv_undef; 
    314340          goto end; 
    315         } else { 
    316           cur = my_obj->last; 
    317           JLOG_ID_ADVANCE(&cur); 
    318         } 
     341        } 
     342        jlog_ctx_advance_id(my_obj->ctx, &my_obj->last, &cur, &my_obj->end); 
    319343      } 
    320344 
     
    338362        my_obj->last = cur; 
    339363        /* if we've reaached the end, clear interval so we'll re-read it */ 
    340         if(!memcmp(&my_obj->last, &my_obj->end, sizeof(jlog_id))) { 
    341           my_obj->start = epoch; 
    342           my_obj->end = epoch; 
    343         } 
    344364      } 
    345365      RETVAL = newSVpv(message.mess, message.mess_len);