Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- use v6;
- class DBM::GDBM {
- use NativeCall;
- constant GDBM_BLOCKSIZE = 0;
- constant GDBM_WRCREAT = 2;
- constant GDBM_REPLACE = 1;
- class datum is repr<CStruct> is rw {
- has str $.dptr;
- has int32 $.dsize;
- }
- class GDBM_FILE is repr<CStruct> {}
- sub gdbm_open(
- Str $name,
- int32 $block_size,
- int32 $flags,
- int32 $mode,
- Pointer[void] $fatal_func
- )
- returns GDBM_FILE is native<libgdbm.so.3> { * }
- sub gdbm_fetch(
- GDBM_FILE $dbf,
- datum $key,
- )
- returns datum is native<libgdbm.so.3> { * }
- # attributes #################################################################
- has GDBM_FILE $.dbf;
- has Str $.gdbm_file_name;
- has Int $.open_flags;
- has Int $.mode;
- # methods ####################################################################
- method new($gdbm_file_name, $open_flags, $mode) {
- my GDBM_FILE $dbf =
- gdbm_open($gdbm_file_name, GDBM_BLOCKSIZE, GDBM_WRCREAT, $mode, Nil);
- return self.bless(:$dbf, :$gdbm_file_name, :$open_flags, :$mode);
- }
- method fetch(str $key is copy) {
- my datum $key_datum = datum.new(dptr => $key, dsize => $key.chars);
- $!dbf.perl.say;
- $key_datum.say;
- $key_datum.dptr.say;
- $key_datum.dsize.say;
- my datum $content_datum = gdbm_fetch($!dbf, $key_datum);
- $content_datum.perl.say;
- return $content_datum
- }
- }
Add Comment
Please, Sign In to add comment