206 lines
5.8 KiB
C++
206 lines
5.8 KiB
C++
/*
|
|
* CDE - Common Desktop Environment
|
|
*
|
|
* Copyright (c) 1993-2012, The Open Group. All rights reserved.
|
|
*
|
|
* These libraries and programs are free software; you can
|
|
* redistribute them and/or modify them under the terms of the GNU
|
|
* Lesser General Public License as published by the Free Software
|
|
* Foundation; either version 2 of the License, or (at your option)
|
|
* any later version.
|
|
*
|
|
* These libraries and programs are distributed in the hope that
|
|
* they will be useful, but WITHOUT ANY WARRANTY; without even the
|
|
* implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
|
|
* PURPOSE. See the GNU Lesser General Public License for more
|
|
* details.
|
|
*
|
|
* You should have received a copy of the GNU Lesser General Public
|
|
* License along with these libraries and programs; if not, write
|
|
* to the Free Software Foundation, Inc., 51 Franklin Street, Fifth
|
|
* Floor, Boston, MA 02110-1301 USA
|
|
*/
|
|
/*
|
|
* $XConsortium: root.h /main/6 1996/07/18 14:46:10 drk $
|
|
*
|
|
* Copyright (c) 1993 HAL Computer Systems International, Ltd.
|
|
* All rights reserved. Unpublished -- rights reserved under
|
|
* the Copyright Laws of the United States. USE OF A COPYRIGHT
|
|
* NOTICE IS PRECAUTIONARY ONLY AND DOES NOT IMPLY PUBLICATION
|
|
* OR DISCLOSURE.
|
|
*
|
|
* THIS SOFTWARE CONTAINS CONFIDENTIAL INFORMATION AND TRADE
|
|
* SECRETS OF HAL COMPUTER SYSTEMS INTERNATIONAL, LTD. USE,
|
|
* DISCLOSURE, OR REPRODUCTION IS PROHIBITED WITHOUT THE
|
|
* PRIOR EXPRESS WRITTEN PERMISSION OF HAL COMPUTER SYSTEMS
|
|
* INTERNATIONAL, LTD.
|
|
*
|
|
* RESTRICTED RIGHTS LEGEND
|
|
* Use, duplication, or disclosure by the Government is subject
|
|
* to the restrictions as set forth in subparagraph (c)(l)(ii)
|
|
* of the Rights in Technical Data and Computer Software clause
|
|
* at DFARS 252.227-7013.
|
|
*
|
|
* HAL COMPUTER SYSTEMS INTERNATIONAL, LTD.
|
|
* 1315 Dell Avenue
|
|
* Campbell, CA 95008
|
|
*
|
|
*/
|
|
|
|
|
|
#ifndef _root_h
|
|
#define _root_h 1
|
|
|
|
#include "utility/funcs.h"
|
|
#include "utility/buffer.h"
|
|
#include "storage/rep_cell.h"
|
|
#include "storage/page.h"
|
|
#include "object/oid_t.h"
|
|
#include "object/c_codes.h"
|
|
#include "object/new_delete.h"
|
|
//#include "Exceptions.hh"
|
|
|
|
class abs_storage;
|
|
|
|
|
|
/************************************/
|
|
// constants used to name status bits
|
|
/************************************/
|
|
enum obj_mode_t { HEALTH,
|
|
SWAP_ALLOWED,
|
|
PERSISTENT,
|
|
UPDATE,
|
|
OLD_OBJECT,
|
|
CDR
|
|
};
|
|
|
|
/************************************/
|
|
// structure recording various status
|
|
// of an object
|
|
/************************************/
|
|
struct status_t
|
|
{
|
|
unsigned reserved: 10; //
|
|
unsigned swap: 1; // swapped out allowed? (true, or false)
|
|
unsigned cdr: 1; // compacted disk rep? (true, or false)
|
|
unsigned ok: 1; // in good shape ? (true, or false)
|
|
unsigned persistent: 1; // persistent ? (true, or false)
|
|
unsigned update: 1; // updated ? (true, or false)
|
|
unsigned old_object :1; // old object? (true, or false)
|
|
unsigned ref_count: 16; // reference count [0, 2^16 - 1];
|
|
};
|
|
|
|
/************************************/
|
|
// structure recording io information
|
|
/************************************/
|
|
class persistent_info
|
|
{
|
|
public:
|
|
|
|
persistent_info(abs_storage* s = 0, c_code_t = 0,
|
|
mmdb_pos_t = 0, Boolean =0, Boolean = 0);
|
|
~persistent_info() {};
|
|
|
|
Boolean cdr;
|
|
abs_storage* storage;
|
|
c_code_t class_code;
|
|
mmdb_pos_t position;
|
|
Boolean persistent; // true -> on persisent store
|
|
// false -> on memory
|
|
Boolean old_object; // true -> object has been created on store
|
|
|
|
};
|
|
|
|
extern persistent_info transient_info;
|
|
|
|
/*************************************/
|
|
// The root class
|
|
/*************************************/
|
|
|
|
#define THIS 0 // const to name this object
|
|
#define BASE_COMPONENT_INDEX 1 // const to name the 1st component
|
|
|
|
class root : public Destructable, public rep_cell
|
|
{
|
|
protected:
|
|
|
|
/***************************/
|
|
// instance-wise data
|
|
/***************************/
|
|
oid_t f_oid;
|
|
status_t status;
|
|
abs_storage* storage_ptr;
|
|
|
|
virtual void init_persistent_info(persistent_info* = &transient_info);
|
|
void set_c_code(c_code_t); // set class code
|
|
|
|
/***************************/
|
|
// static data and function
|
|
/***************************/
|
|
static void* heap_alloc( size_t sz );
|
|
|
|
public:
|
|
root(c_code_t c_id = ROOT_CODE);
|
|
root(const oid_t& );
|
|
root(const root&);
|
|
virtual ~root() ;
|
|
|
|
#ifdef C_API
|
|
NEW_AND_DELETE_SIGNATURES(root);
|
|
#endif
|
|
|
|
MMDB_SIGNATURES(root);
|
|
|
|
// status set and get functions
|
|
virtual void set_mode(obj_mode_t, Boolean);
|
|
Boolean get_mode(obj_mode_t) const;
|
|
|
|
// reference count set and get functions
|
|
void reset_ref_count();
|
|
void set_ref_count(int delta);
|
|
int get_ref_count();
|
|
|
|
abs_storage* get_store() { return storage_ptr; };
|
|
|
|
// status inquiry functions
|
|
virtual Boolean OK() const ; // in good shape ?
|
|
virtual ostream& memory_layout(root*, ostream& = cerr);
|
|
|
|
/*
|
|
// value comparison functions
|
|
virtual Boolean value_EQ(root&, Boolean safe = true) const ;
|
|
virtual Boolean value_LS(root&, Boolean safe = true) const ;
|
|
*/
|
|
|
|
// export functions
|
|
const oid_t& my_oid() const ; // get oid
|
|
|
|
// ascii In and Out functions
|
|
virtual io_status asciiOut(ostream&) ; // output (ASCII)
|
|
virtual io_status asciiIn(istream&) ; // init from istream (ASCII)
|
|
|
|
friend ostream& operator<<(ostream&, const root&) ;
|
|
|
|
// compacted disk representation In and Out functions
|
|
virtual int cdr_sizeof();
|
|
virtual io_status cdrOut(buffer&);
|
|
virtual io_status cdrIn(buffer&);
|
|
virtual void commit() {}; // for commit all components
|
|
|
|
|
|
friend class template_mgr_t;
|
|
friend class service_mgr_t;
|
|
friend class oid;
|
|
|
|
#ifdef C_API
|
|
friend void initialize_MMDB();
|
|
friend void quit_MMDB();
|
|
#endif
|
|
|
|
};
|
|
|
|
typedef root* rootPtr;
|
|
|
|
|
|
#endif
|