You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@datasketches.apache.org by al...@apache.org on 2019/06/24 22:49:47 UTC
[incubator-datasketches-cpp] 03/05: serialize header for postgresql
This is an automated email from the ASF dual-hosted git repository.
alsay pushed a commit to branch placement_new
in repository https://gitbox.apache.org/repos/asf/incubator-datasketches-cpp.git
commit 0359d7898099ede5e10bee9b0daba6128ab01ef3
Author: AlexanderSaydakov <Al...@users.noreply.github.com>
AuthorDate: Mon Jun 24 15:38:52 2019 -0700
serialize header for postgresql
---
hll/include/CouponList-internal.hpp | 23 ++++++++---------------
hll/include/CouponList.hpp | 4 ++--
hll/include/HllArray-internal.hpp | 6 +++---
hll/include/HllArray.hpp | 4 ++--
hll/include/HllSketchImpl.hpp | 4 ++--
hll/include/hll.hpp | 2 +-
6 files changed, 18 insertions(+), 25 deletions(-)
diff --git a/hll/include/CouponList-internal.hpp b/hll/include/CouponList-internal.hpp
index e9635c1..a2111ba 100644
--- a/hll/include/CouponList-internal.hpp
+++ b/hll/include/CouponList-internal.hpp
@@ -92,16 +92,12 @@ std::function<void(HllSketchImpl<A>*)> CouponList<A>::get_deleter() const {
template<typename A>
CouponList<A>* CouponList<A>::copy() const {
- CouponList<A>* cl = clAlloc().allocate(1);
- clAlloc().construct(cl, *this);
- return cl;
+ return new (clAlloc().allocate(1)) CouponList<A>(*this);
}
template<typename A>
CouponList<A>* CouponList<A>::copyAs(const TgtHllType tgtHllType) const {
- CouponList<A>* cl = clAlloc().allocate(1);
- clAlloc().construct(cl, *this, tgtHllType);
- return cl;
+ return new (clAlloc().allocate(1)) CouponList<A>(*this, tgtHllType);
}
template<typename A>
@@ -142,8 +138,7 @@ CouponList<A>* CouponList<A>::newList(const void* bytes, size_t len) {
+ ", found: " + std::to_string(len));
}
- CouponList<A>* sketch = clAlloc().allocate(1);
- clAlloc().construct(sketch, lgK, tgtHllType, curMode);
+ CouponList<A>* sketch = new (clAlloc().allocate(1)) CouponList<A>(lgK, tgtHllType, curMode);
sketch->couponCount = couponCount;
sketch->putOutOfOrderFlag(oooFlag); // should always be false for LIST
@@ -183,8 +178,7 @@ CouponList<A>* CouponList<A>::newList(std::istream& is) {
bool oooFlag = ((listHeader[HllUtil<A>::FLAGS_BYTE] & HllUtil<A>::OUT_OF_ORDER_FLAG_MASK) ? true : false);
bool emptyFlag = ((listHeader[HllUtil<A>::FLAGS_BYTE] & HllUtil<A>::EMPTY_FLAG_MASK) ? true : false);
- CouponList<A>* sketch = clAlloc().allocate(1);
- clAlloc().construct(sketch, lgK, tgtHllType, curMode);
+ CouponList<A>* sketch = new (clAlloc().allocate(1)) CouponList<A>(lgK, tgtHllType, curMode);
const int couponCount = (int) listHeader[HllUtil<A>::LIST_COUNT_BYTE];
sketch->couponCount = couponCount;
sketch->putOutOfOrderFlag(oooFlag); // should always be false for LIST
@@ -201,15 +195,15 @@ CouponList<A>* CouponList<A>::newList(std::istream& is) {
}
template<typename A>
-std::pair<std::unique_ptr<uint8_t, std::function<void(uint8_t*)>>, const size_t> CouponList<A>::serialize(bool compact) const {
- size_t sketchSizeBytes = (compact ? getCompactSerializationBytes() : getUpdatableSerializationBytes());
+std::pair<std::unique_ptr<uint8_t, std::function<void(uint8_t*)>>, const size_t> CouponList<A>::serialize(bool compact, unsigned header_size_bytes) const {
+ size_t sketchSizeBytes = (compact ? getCompactSerializationBytes() : getUpdatableSerializationBytes()) + header_size_bytes;
typedef typename std::allocator_traits<A>::template rebind_alloc<uint8_t> uint8Alloc;
std::unique_ptr<uint8_t, std::function<void(uint8_t*)>> byteArr(
uint8Alloc().allocate(sketchSizeBytes),
[sketchSizeBytes](uint8_t* p){ uint8Alloc().deallocate(p, sketchSizeBytes); }
);
- uint8_t* bytes = byteArr.get();
+ uint8_t* bytes = byteArr.get() + header_size_bytes;
bytes[HllUtil<A>::PREAMBLE_INTS_BYTE] = static_cast<uint8_t>(getPreInts());
bytes[HllUtil<A>::SER_VER_BYTE] = static_cast<uint8_t>(HllUtil<A>::SER_VER);
@@ -411,8 +405,7 @@ int* CouponList<A>::getCouponIntArr() const {
template<typename A>
PairIterator_with_deleter<A> CouponList<A>::getIterator() const {
typedef typename std::allocator_traits<A>::template rebind_alloc<IntArrayPairIterator<A>> iapiAlloc;
- IntArrayPairIterator<A>* itr = iapiAlloc().allocate(1);
- iapiAlloc().construct(itr, couponIntArr, 1 << lgCouponArrInts, this->lgConfigK);
+ IntArrayPairIterator<A>* itr = new (iapiAlloc().allocate(1)) IntArrayPairIterator<A>(couponIntArr, 1 << lgCouponArrInts, this->lgConfigK);
return PairIterator_with_deleter<A>(
itr,
[](PairIterator<A>* ptr) {
diff --git a/hll/include/CouponList.hpp b/hll/include/CouponList.hpp
index 77454eb..2782154 100644
--- a/hll/include/CouponList.hpp
+++ b/hll/include/CouponList.hpp
@@ -37,7 +37,7 @@ class CouponList : public HllSketchImpl<A> {
static CouponList* newList(const void* bytes, size_t len);
static CouponList* newList(std::istream& is);
- virtual std::pair<std::unique_ptr<uint8_t, std::function<void(uint8_t*)>>, const size_t> serialize(bool compact) const;
+ virtual std::pair<std::unique_ptr<uint8_t, std::function<void(uint8_t*)>>, const size_t> serialize(bool compact, unsigned header_size_bytes) const;
virtual void serialize(std::ostream& os, bool compact) const;
virtual ~CouponList();
@@ -89,4 +89,4 @@ class CouponList : public HllSketchImpl<A> {
//#include "CouponList-internal.hpp"
-#endif /* _COUPONLIST_HPP_ */
\ No newline at end of file
+#endif /* _COUPONLIST_HPP_ */
diff --git a/hll/include/HllArray-internal.hpp b/hll/include/HllArray-internal.hpp
index 3ad54bf..d6ea6c9 100644
--- a/hll/include/HllArray-internal.hpp
+++ b/hll/include/HllArray-internal.hpp
@@ -224,15 +224,15 @@ HllArray<A>* HllArray<A>::newHll(std::istream& is) {
}
template<typename A>
-std::pair<std::unique_ptr<uint8_t, std::function<void(uint8_t*)>>, const size_t> HllArray<A>::serialize(bool compact) const {
- const size_t sketchSizeBytes = (compact ? getCompactSerializationBytes() : getUpdatableSerializationBytes());
+std::pair<std::unique_ptr<uint8_t, std::function<void(uint8_t*)>>, const size_t> HllArray<A>::serialize(bool compact, unsigned header_size_bytes) const {
+ const size_t sketchSizeBytes = (compact ? getCompactSerializationBytes() : getUpdatableSerializationBytes()) + header_size_bytes;
typedef typename std::allocator_traits<A>::template rebind_alloc<uint8_t> uint8Alloc;
std::unique_ptr<uint8_t, std::function<void(uint8_t*)>> byteArr(
uint8Alloc().allocate(sketchSizeBytes),
[sketchSizeBytes](uint8_t* p){ uint8Alloc().deallocate(p, sketchSizeBytes); }
);
- uint8_t* bytes = byteArr.get();
+ uint8_t* bytes = byteArr.get() + header_size_bytes;
AuxHashMap<A>* auxHashMap = getAuxHashMap();
bytes[HllUtil<A>::PREAMBLE_INTS_BYTE] = static_cast<uint8_t>(getPreInts());
diff --git a/hll/include/HllArray.hpp b/hll/include/HllArray.hpp
index f01ef40..aa9a87e 100644
--- a/hll/include/HllArray.hpp
+++ b/hll/include/HllArray.hpp
@@ -39,7 +39,7 @@ class HllArray : public HllSketchImpl<A> {
static HllArray* newHll(const void* bytes, size_t len);
static HllArray* newHll(std::istream& is);
- virtual std::pair<std::unique_ptr<uint8_t, std::function<void(uint8_t*)>>, const size_t> serialize(bool compact) const;
+ virtual std::pair<std::unique_ptr<uint8_t, std::function<void(uint8_t*)>>, const size_t> serialize(bool compact, unsigned header_size_bytes) const;
virtual void serialize(std::ostream& os, bool compact) const;
virtual ~HllArray();
@@ -123,4 +123,4 @@ class HllArray : public HllSketchImpl<A> {
//#include "HllArray-internal.hpp"
-#endif /* _HLLARRAY_HPP_ */
\ No newline at end of file
+#endif /* _HLLARRAY_HPP_ */
diff --git a/hll/include/HllSketchImpl.hpp b/hll/include/HllSketchImpl.hpp
index 59e322f..2ebf2e6 100644
--- a/hll/include/HllSketchImpl.hpp
+++ b/hll/include/HllSketchImpl.hpp
@@ -35,7 +35,7 @@ class HllSketchImpl {
virtual ~HllSketchImpl();
virtual void serialize(std::ostream& os, bool compact) const = 0;
- virtual std::pair<std::unique_ptr<uint8_t, std::function<void(uint8_t*)>>, const size_t> serialize(bool compact) const = 0;
+ virtual std::pair<std::unique_ptr<uint8_t, std::function<void(uint8_t*)>>, const size_t> serialize(bool compact, unsigned header_size_bytes) const = 0;
//static HllSketchImpl* deserialize(std::istream& os);
//static HllSketchImpl* deserialize(const void* bytes, size_t len);
@@ -90,4 +90,4 @@ class HllSketchImpl {
//#include "HllSketchImpl-internal.hpp"
-#endif // _HLLSKETCHIMPL_HPP_
\ No newline at end of file
+#endif // _HLLSKETCHIMPL_HPP_
diff --git a/hll/include/hll.hpp b/hll/include/hll.hpp
index 9b6ccfa..7245bd7 100644
--- a/hll/include/hll.hpp
+++ b/hll/include/hll.hpp
@@ -61,7 +61,7 @@ class HllSketch final {
void reset();
- std::pair<byte_ptr_with_deleter, const size_t> serializeCompact() const;
+ std::pair<byte_ptr_with_deleter, const size_t> serializeCompact(unsigned header_size_bytes = 0) const;
std::pair<byte_ptr_with_deleter, const size_t> serializeUpdatable() const;
void serializeCompact(std::ostream& os) const;
void serializeUpdatable(std::ostream& os) const;
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@datasketches.apache.org
For additional commands, e-mail: commits-help@datasketches.apache.org