JustThisGuy

GDBM.pm6

Feb 1st, 2016
53
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Perl 6 1.41 KB | None | 0 0
  1. use v6;
  2.  
  3. class DBM::GDBM {
  4.  
  5.   use NativeCall;
  6.  
  7.   constant GDBM_BLOCKSIZE = 0;
  8.   constant GDBM_WRCREAT   = 2;
  9.   constant GDBM_REPLACE   = 1;
  10.  
  11.   class datum is repr<CStruct> is rw {
  12.     has str   $.dptr;
  13.     has int32 $.dsize;
  14.   }
  15.  
  16.   class GDBM_FILE is repr<CStruct> {}
  17.  
  18.   sub gdbm_open(
  19.     Str           $name,
  20.     int32         $block_size,
  21.     int32         $flags,
  22.     int32         $mode,
  23.     Pointer[void] $fatal_func
  24.   )
  25.     returns GDBM_FILE is native<libgdbm.so.3> { * }
  26.  
  27.   sub gdbm_fetch(
  28.     GDBM_FILE $dbf,
  29.     datum     $key,
  30.   )
  31.     returns datum is native<libgdbm.so.3> { * }
  32.  
  33.   # attributes #################################################################
  34.  
  35.   has GDBM_FILE $.dbf;
  36.   has Str $.gdbm_file_name;
  37.   has Int $.open_flags;
  38.   has Int $.mode;
  39.  
  40.   # methods ####################################################################
  41.  
  42.   method new($gdbm_file_name, $open_flags, $mode) {
  43.     my GDBM_FILE $dbf =
  44.       gdbm_open($gdbm_file_name, GDBM_BLOCKSIZE, GDBM_WRCREAT, $mode, Nil);
  45.  
  46.     return self.bless(:$dbf, :$gdbm_file_name, :$open_flags, :$mode);
  47.   }
  48.  
  49.   method fetch(str $key is copy) {
  50.     my datum $key_datum = datum.new(dptr => $key, dsize => $key.chars);
  51.  
  52. $!dbf.perl.say;
  53. $key_datum.say;
  54. $key_datum.dptr.say;
  55. $key_datum.dsize.say;
  56.     my datum $content_datum = gdbm_fetch($!dbf, $key_datum);
  57. $content_datum.perl.say;
  58.  
  59.     return $content_datum
  60.   }
  61.  
  62. }
Add Comment
Please, Sign In to add comment