BIdxDestroy.cc

00001 /* 
00002    EyeDB Object Database Management System
00003    Copyright (C) 1994-2008 SYSRA
00004    
00005    EyeDB is free software; you can redistribute it and/or
00006    modify it under the terms of the GNU Lesser General Public
00007    License as published by the Free Software Foundation; either
00008    version 2.1 of the License, or (at your option) any later version.
00009    
00010    EyeDB is distributed in the hope that it will be useful,
00011    but WITHOUT ANY WARRANTY; without even the implied warranty of
00012    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
00013    Lesser General Public License for more details.
00014    
00015    You should have received a copy of the GNU Lesser General Public
00016    License along with this library; if not, write to the Free Software
00017    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA 
00018 */
00019 
00020 /*
00021    Authors: Stuart Pook
00022             Eric Viara <viara@sysra.com>
00023 */
00024 
00025 #include <eyedbconfig.h>
00026 
00027 #include        <stdlib.h>
00028 #include        <string.h>
00029 #include        <assert.h>
00030 
00031 #include <eyedbsm/eyedbsm.h>
00032 #include        "BIdxBTree.h"
00033 
00034 namespace eyedbsm {
00035 
00036   static Status
00037   destroyS(BIdx * idx, Oid oid)
00038   {
00039     Status s;
00040     BIdx::InCore x(idx);
00041     if (s = x.read(&oid))
00042       return s;
00043         
00044     if (!x.node->leaf)
00045       for (unsigned i = 0; i <= x.node->n; i++)
00046         if (s = destroyS(idx, x.node->c[i]))
00047           return s;
00048 
00049     return x.destroy();
00050   }
00051 
00052   Status
00053   BIdx::destroy()
00054   {
00055     BTree tree;
00056     if (stat = readBTree(tree))
00057       return fatal();
00058     if (stat = objectDelete(dbh, sizeof tree, &treeOid))
00059       return fatal();
00060     if (stat = objectDelete(dbh, _nkeys * sizeof (KeyType), &tree.type))
00061       return fatal();
00062     return destroyS(this, tree.root);
00063   }
00064 }

Generated on Mon Dec 22 18:15:50 2008 for eyedb by  doxygen 1.5.3