Class: ChunkIO::Chunk
- Inherits:
-
Object
- Object
- ChunkIO::Chunk
- Defined in:
- ext/chunkio/chunkio_chunk.c
Instance Method Summary collapse
-
#bytesize ⇒ Object
}.
- #close ⇒ Object
- #data ⇒ Object
- #initialize(context, stream, name) ⇒ Object constructor
- #metadata ⇒ Object
- #set_metadata(buf) ⇒ Object
-
#sync ⇒ Object
}.
- #tx_begin ⇒ Object
- #tx_commit ⇒ Object
- #tx_rollback ⇒ Object
- #unlink ⇒ Object
- #write(buf) ⇒ Object
Constructor Details
#initialize(context, stream, name) ⇒ Object
23 24 25 26 27 28 29 30 31 32 33 |
# File 'ext/chunkio/chunkio_chunk.c', line 23 static VALUE chunkio_chunk_initialize(VALUE self, VALUE context, VALUE stream, VALUE name) { struct cio_ctx *ctx = UnwrapChunkIOContext(context); struct cio_stream *st = UnwrapChunkIOStream(stream); const char *c_name = RSTRING_PTR(name); struct cio_chunk *chunk = cio_chunk_open(ctx, st, c_name, CIO_OPEN, 1000); ((chunkio_chunk*)DATA_PTR(self))->inner = chunk; return self; } |
Instance Method Details
#bytesize ⇒ Object
}
100 101 102 103 104 105 106 107 |
# File 'ext/chunkio/chunkio_chunk.c', line 100 static VALUE chunkio_chunk_bytesize(VALUE self) { chunkio_chunk *chunk = NULL; TypedData_Get_Struct(self, chunkio_chunk, &chunkio_chunk_type, chunk); size_t size = cio_chunk_get_content_size(chunk->inner); return INT2NUM(size); } |
#close ⇒ Object
51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 |
# File 'ext/chunkio/chunkio_chunk.c', line 51 static VALUE chunkio_chunk_close(VALUE self) { chunkio_chunk *chunk = NULL; int type; struct cio_file *cf; TypedData_Get_Struct(self, chunkio_chunk, &chunkio_chunk_type, chunk); if (!chunk->closed) { cio_chunk_sync(chunk->inner); type = chunk->inner->st->type; if (type == CIO_STORE_FS) { /* COPY form chunkio cio_file.c */ chunk->inner->st->type; cf = (struct cio_file *)chunk->inner->backend; close(cf->fd); cf->fd = 0; } chunk->closed = 1; /* mark as close */ return Qnil; } return Qnil; } |
#data ⇒ Object
173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 |
# File 'ext/chunkio/chunkio_chunk.c', line 173 static VALUE chunkio_chunk_get_data(VALUE self) { chunkio_chunk *chunk; TypedData_Get_Struct(self, chunkio_chunk, &chunkio_chunk_type, chunk); if (chunk->closed) { rb_raise(rb_eIOError, "IO was already closed"); } char *buf = NULL; size_t size = 0; int ret = cio_chunk_get_content(chunk->inner, &buf, &size); if (ret == -1) { rb_raise(rb_eStandardError, "failed to get data"); } return rb_str_new(buf, size); } |
#metadata ⇒ Object
125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 |
# File 'ext/chunkio/chunkio_chunk.c', line 125 static VALUE (VALUE self) { chunkio_chunk *chunk = NULL; TypedData_Get_Struct(self, chunkio_chunk, &chunkio_chunk_type, chunk); if (chunk->closed) { rb_raise(rb_eIOError, "IO was already closed"); } char *buf = NULL; size_t size = 0; /* cio_meta_chunk return -1 if size is 0... */ if ((chunk->inner) == 0) { return rb_str_new(0, 0); } int ret = (chunk->inner, &buf, &size); if (ret == -1) { rb_raise(rb_eStandardError, "failed to get metadata"); } return rb_str_new(buf, size); } |
#set_metadata(buf) ⇒ Object
109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 |
# File 'ext/chunkio/chunkio_chunk.c', line 109 static VALUE (VALUE self, VALUE buf) { chunkio_chunk *chunk = NULL; TypedData_Get_Struct(self, chunkio_chunk, &chunkio_chunk_type, chunk); if (chunk->closed) { rb_raise(rb_eIOError, "IO was already closed"); } ssize_t len = RSTRING_LEN(buf); int ret = (chunk->inner, (void *)RSTRING_PTR(buf), len); if (ret == -1) { rb_raise(rb_eStandardError, "failed to set metadata"); } return INT2NUM(len); } |
#sync ⇒ Object
}
158 159 160 161 162 163 164 165 166 167 168 169 170 171 |
# File 'ext/chunkio/chunkio_chunk.c', line 158 static VALUE chunkio_chunk_sync(VALUE self) { chunkio_chunk *chunk; TypedData_Get_Struct(self, chunkio_chunk, &chunkio_chunk_type, chunk); if (chunk->closed) { rb_raise(rb_eIOError, "IO was already closed"); } size_t ret = cio_chunk_sync(chunk->inner); if (ret == -1) { rb_raise(rb_eStandardError, "failed to sync"); } return Qnil; } |
#tx_begin ⇒ Object
191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 |
# File 'ext/chunkio/chunkio_chunk.c', line 191 static VALUE chunkio_chunk_tx_begin(VALUE self) { chunkio_chunk *chunk; TypedData_Get_Struct(self, chunkio_chunk, &chunkio_chunk_type, chunk); if (chunk->closed) { rb_raise(rb_eIOError, "IO was already closed"); } int ret = cio_chunk_tx_begin(chunk->inner); if (ret == -1) { rb_raise(rb_eStandardError, "failed to begin transaction"); } return Qnil; } |
#tx_commit ⇒ Object
207 208 209 210 211 212 213 214 215 216 217 218 219 220 |
# File 'ext/chunkio/chunkio_chunk.c', line 207 static VALUE chunkio_chunk_tx_commit(VALUE self) { chunkio_chunk *chunk; TypedData_Get_Struct(self, chunkio_chunk, &chunkio_chunk_type, chunk); if (chunk->closed) { rb_raise(rb_eIOError, "IO was already closed"); } int ret = cio_chunk_tx_commit(chunk->inner); if (ret == -1) { rb_raise(rb_eStandardError, "failed to commit transaction"); } return Qnil; } |
#tx_rollback ⇒ Object
222 223 224 225 226 227 228 229 230 231 232 233 234 235 |
# File 'ext/chunkio/chunkio_chunk.c', line 222 static VALUE chunkio_chunk_tx_rollback(VALUE self) { chunkio_chunk *chunk; TypedData_Get_Struct(self, chunkio_chunk, &chunkio_chunk_type, chunk); if (chunk->closed) { rb_raise(rb_eIOError, "IO was already closed"); } int ret = cio_chunk_tx_rollback(chunk->inner); if (ret == -1) { rb_raise(rb_eStandardError, "failed to rollback transaction"); } return Qnil; } |
#unlink ⇒ Object
35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 |
# File 'ext/chunkio/chunkio_chunk.c', line 35 static VALUE chunkio_chunk_unlink(VALUE self) { chunkio_chunk *chunk = NULL; TypedData_Get_Struct(self, chunkio_chunk, &chunkio_chunk_type, chunk); if (chunk->closed) { rb_raise(rb_eIOError, "IO was already closed"); } if (cio_chunk_unlink(chunk->inner) == -1) { rb_raise(rb_eIOError, "Failed to unlink"); } chunk->closed = 1; /* mark as closed */ return Qnil; } |
#write(buf) ⇒ Object
76 77 78 79 80 81 82 83 84 85 86 87 |
# File 'ext/chunkio/chunkio_chunk.c', line 76 static VALUE chunkio_chunk_write(VALUE self, VALUE buf) { chunkio_chunk *chunk = NULL; TypedData_Get_Struct(self, chunkio_chunk, &chunkio_chunk_type, chunk); ssize_t len = RSTRING_LEN(buf); if (chunk->closed) { rb_raise(rb_eIOError, "IO was already closed"); } cio_chunk_write(chunk->inner, (void *)RSTRING_PTR(buf), len); return INT2NUM(len); } |