Example #1
0
    void InitFreeMaps() {
        string free_file_name = dbname_+".free";

        if(access(free_file_name.c_str(), F_OK) < 0)	//file not exist, nothing to do
            return;

        int free_fd = ::Open(free_file_name, O_RDWR);
        ::Unlink(free_file_name);		//unlink it
        int n_free_node, n_free_data;
        ::Read(free_fd, &n_free_node, sizeof(n_free_node));
        ::Read(free_fd, &n_free_data, sizeof(n_free_data));

        Link l;
        for(int i=0; i<n_free_node; i++) {
            Link::Read(&l, free_fd);
            free_node_[l.GetTotalSize()] = l;
        }
        for(int i=0; i<n_free_data; i++) {
            Link::Read(&l, free_fd);
            free_data_[l.GetTotalSize()] = l;
        }

        ::Close(free_fd);
    }