]>
git.proxmox.com Git - ceph.git/blob - ceph/src/crimson/os/cyanstore/cyan_object.cc
1 #include "cyan_object.h"
2 #include "include/encoding.h"
4 namespace crimson::os
{
6 size_t Object::get_size() const {
10 ceph::bufferlist
Object::read(uint64_t offset
, uint64_t len
)
13 ret
.substr_of(data
, offset
, len
);
17 int Object::write(uint64_t offset
, const bufferlist
&src
)
19 unsigned len
= src
.length();
22 if (get_size() >= offset
) {
23 newdata
.substr_of(data
, 0, offset
);
26 newdata
.substr_of(data
, 0, get_size());
28 newdata
.append_zero(offset
- get_size());
34 if (get_size() > offset
+ len
) {
36 tail
.substr_of(data
, offset
+ len
, get_size() - (offset
+ len
));
44 int Object::clone(Object
*src
, uint64_t srcoff
, uint64_t len
,
48 if (srcoff
== dstoff
&& len
== src
->get_size()) {
52 bl
.substr_of(src
->data
, srcoff
, len
);
53 return write(dstoff
, bl
);
57 int Object::truncate(uint64_t size
)
59 if (get_size() > size
) {
61 bl
.substr_of(data
, 0, size
);
63 } else if (get_size() == size
) {
66 data
.append_zero(size
- get_size());
71 void Object::encode(bufferlist
& bl
) const {
72 ENCODE_START(1, 1, bl
);
75 encode(omap_header
, bl
);
80 void Object::decode(bufferlist::const_iterator
& p
) {
84 decode(omap_header
, p
);