/*
Copyright (c) 1999, Gary YiHsiang Hsiao. All Rights Reserved.
bugs report to: ghsiao@rbcds.com or ghsiao@netzero.net
Permission to use, copy, modify, and distribute this software
for NON-COMMERCIAL purposes and without fee
is hereby granted provided that this copyright notice
appears in all copies. This software is distributed on an 'as is'
basis without warranty.
Release: 1.0 05-Sep-1999
*/
#ifndef OBJAVL_H
#define OBJAVL_H
#include "POBObj.h"
#include
// Class to manage available space for objects
// note: it is placed into the same disk file area
class objAvl : public POBObj {
friend ostream& operator<<(ostream&, objAvl&);
public:
typedef pair SIZE_POS;
objAvl();
~objAvl();
objAvl& operator=(const objAvl&);
static POBObj* create() { return (POBObj*)(new objAvl); }
operator const string& ();
void operator=(const string&);
bool isEmpty();
bool getAvl(size_t, streampos&);
void addAvl(size_t, streampos);
void removepad();
bool isEmptySlot(streampos, size_t&);
size_t spaceRecollection();
size_t deqsize();
private:
void getpos(int, int size, streampos&);
bool deque_best_bsearch(size_t, size_t&);
void swap(int, int);
void sort_by_pos(int, int);
void sort_by_size(int, int);
private:
const size_t _max;
size_t _acc_size;
int _pad_size;
deque _avl;
};
#endif