JustThisGuy

DBM::GDBM.pm6

Jun 1st, 2015
328
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.09 KB | None | 0 0
  1. use v6;
  2.  
  3. use NativeCall;
  4.  
  5. constant GDBM_BLOCKSIZE = 0;
  6. constant GDBM_WRCREAT = 2;
  7.  
  8. constant GDBM_REPLACE = 1;
  9.  
  10. class datum is repr('CStruct') {
  11. has Str $.dptr is rw;
  12. has int32 $.dsize is rw;
  13. }
  14.  
  15. class DBM::GDBM is repr('CPointer') {
  16.  
  17. sub gdbm_open(
  18. Str $name,
  19. int32 $block_size,
  20. int32 $flags,
  21. int32 $mode,
  22. Pointer[void] $fatal_func
  23. )
  24. returns DBM::GDBM is native('libgdbm.so.3') { * }
  25.  
  26. sub gdbm_store(
  27. DBM::GDBM $dbf,
  28. datum $key,
  29. datum $content,
  30. int32 $flag,
  31. )
  32. returns int32 is native('libgdbm.so.3') { * }
  33.  
  34. method new($gdbm_file_name, $flags, $mode) {
  35. return gdbm_open($gdbm_file_name, GDBM_BLOCKSIZE, GDBM_WRCREAT, $mode, Nil);
  36. }
  37.  
  38. method store(Str $key is rw, Str $value is rw) {
  39. my datum $key_datum = datum.new(dptr => $key, dsize => $key.chars);
  40. my datum $content_datum = datum.new(dptr => $value, dsize => $value.chars);
  41.  
  42. return gdbm_store(self, $key_datum, $content_datum, GDBM_REPLACE);
  43. }
  44. }
Advertisement
Add Comment
Please, Sign In to add comment