Class: SimpleMmap::MappedFile

Inherits:
Object
  • Object
show all
Defined in:
ext/simple_mmap/mapped_file.c

Defined Under Namespace

Classes: MmapData

Instance Method Summary collapse

Instance Method Details

#closeObject

munmap() the current mmapped file



94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
# File 'ext/simple_mmap/mapped_file.c', line 94

static VALUE sm_mapped_file_close(VALUE vself)
{
  VALUE vsm_map;
  simple_mmap_map *sm_map;
  
  sm_map = ALLOC(simple_mmap_map);
  vsm_map = rb_ivar_get(vself, rb_intern("@mmap_data"));
  Data_Get_Struct(vsm_map, simple_mmap_map, sm_map);
  
  if (sm_map->map != (caddr_t) -1)
    munmap(sm_map->map, sm_map->len);
  if (sm_map->fd != -1)
    close(sm_map->fd);
  
  return Qtrue;
}

#read_window_data(offset, length) ⇒ Object

Read length bytes starting at offset



117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
# File 'ext/simple_mmap/mapped_file.c', line 117

static VALUE sm_mapped_file_read_window_data(VALUE vself, VALUE voffset, VALUE vlength) 
{
  size_t offset = NUM2INT(voffset);
  size_t length = NUM2INT(vlength);
  VALUE vsm_map;
  simple_mmap_map *sm_map;
  
  vsm_map = rb_ivar_get(vself, rb_intern("@mmap_data"));
  Data_Get_Struct(vsm_map, simple_mmap_map, sm_map);
  
  if (offset < 0 || offset > sm_map->len) {
    return Qnil;
  }

  // If the range overflows, return part that overlaps
  if ((offset + length) > sm_map->len) {
    length = sm_map->len - offset;
  }

  return rb_str_new(sm_map->map + offset, length);
}

#sizeObject

Return size of mapped file



146
147
148
149
150
151
152
153
154
# File 'ext/simple_mmap/mapped_file.c', line 146

static VALUE sm_mapped_file_size(VALUE vself)
{
  VALUE vsm_map;
  simple_mmap_map *sm_map;

  vsm_map = rb_ivar_get(vself, rb_intern("@mmap_data"));
  Data_Get_Struct(vsm_map, simple_mmap_map, sm_map);
  return UINT2NUM(sm_map->len);
}