make rowbatch page flexible
This commit is contained in:
parent
7d1e9f06d4
commit
9d3e09ff2a
@ -16,7 +16,7 @@ namespace io {
|
|||||||
/*! \brief page structure that can be used to store a rowbatch */
|
/*! \brief page structure that can be used to store a rowbatch */
|
||||||
struct RowBatchPage {
|
struct RowBatchPage {
|
||||||
public:
|
public:
|
||||||
RowBatchPage(void) {
|
RowBatchPage(size_t page_size) : kPageSize(page_size) {
|
||||||
data_ = new int[kPageSize];
|
data_ = new int[kPageSize];
|
||||||
utils::Assert(data_ != NULL, "fail to allocate row batch page");
|
utils::Assert(data_ != NULL, "fail to allocate row batch page");
|
||||||
this->Clear();
|
this->Clear();
|
||||||
@ -82,8 +82,6 @@ struct RowBatchPage {
|
|||||||
inline int Size(void) const {
|
inline int Size(void) const {
|
||||||
return data_[0];
|
return data_[0];
|
||||||
}
|
}
|
||||||
/*! \brief page size 64 MB */
|
|
||||||
static const size_t kPageSize = 64 << 18;
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
/*! \return number of elements */
|
/*! \return number of elements */
|
||||||
@ -98,6 +96,8 @@ struct RowBatchPage {
|
|||||||
inline RowBatch::Entry* data_ptr(int i) {
|
inline RowBatch::Entry* data_ptr(int i) {
|
||||||
return (RowBatch::Entry*)(&data_[1]) + i;
|
return (RowBatch::Entry*)(&data_[1]) + i;
|
||||||
}
|
}
|
||||||
|
// page size
|
||||||
|
const size_t kPageSize;
|
||||||
// content of data
|
// content of data
|
||||||
int *data_;
|
int *data_;
|
||||||
};
|
};
|
||||||
@ -137,7 +137,7 @@ class ThreadRowPageIterator: public utils::IIterator<RowBatch> {
|
|||||||
*/
|
*/
|
||||||
inline static void Save(utils::IIterator<RowBatch> *iter,
|
inline static void Save(utils::IIterator<RowBatch> *iter,
|
||||||
utils::IStream &fo) {
|
utils::IStream &fo) {
|
||||||
RowBatchPage page;
|
RowBatchPage page(kPageSize);
|
||||||
iter->BeforeFirst();
|
iter->BeforeFirst();
|
||||||
while (iter->Next()) {
|
while (iter->Next()) {
|
||||||
const RowBatch &batch = iter->Value();
|
const RowBatch &batch = iter->Value();
|
||||||
@ -151,6 +151,8 @@ class ThreadRowPageIterator: public utils::IIterator<RowBatch> {
|
|||||||
}
|
}
|
||||||
if (page.Size() != 0) page.Save(fo);
|
if (page.Size() != 0) page.Save(fo);
|
||||||
}
|
}
|
||||||
|
/*! \brief page size 64 MB */
|
||||||
|
static const size_t kPageSize = 64 << 18;
|
||||||
private:
|
private:
|
||||||
// base row id
|
// base row id
|
||||||
size_t base_rowid_;
|
size_t base_rowid_;
|
||||||
@ -178,7 +180,7 @@ class ThreadRowPageIterator: public utils::IIterator<RowBatch> {
|
|||||||
return val->Load(fi);
|
return val->Load(fi);
|
||||||
}
|
}
|
||||||
inline PagePtr Create(void) {
|
inline PagePtr Create(void) {
|
||||||
PagePtr a = new RowBatchPage();
|
PagePtr a = new RowBatchPage(kPageSize);
|
||||||
return a;
|
return a;
|
||||||
}
|
}
|
||||||
inline void FreeSpace(PagePtr &a) {
|
inline void FreeSpace(PagePtr &a) {
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user