ttlbtree.cpp

来自「开放源码的编译器open watcom 1.6.0版的源代码」· C++ 代码 · 共 186 行

CPP
186
字号
/****************************************************************************
*
*                            Open Watcom Project
*
*    Portions Copyright (c) 1983-2002 Sybase, Inc. All Rights Reserved.
*
*  ========================================================================
*
*    This file contains Original Code and/or Modifications of Original
*    Code as defined in and that are subject to the Sybase Open Watcom
*    Public License version 1.0 (the 'License'). You may not use this file
*    except in compliance with the License. BY USING THIS FILE YOU AGREE TO
*    ALL TERMS AND CONDITIONS OF THE LICENSE. A copy of the License is
*    provided with the Original Code and Modifications, and is also
*    available at www.sybase.com/developer/opensource.
*
*    The Original Code and all software distributed under the License are
*    distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
*    EXPRESS OR IMPLIED, AND SYBASE AND ALL CONTRIBUTORS HEREBY DISCLAIM
*    ALL SUCH WARRANTIES, INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF
*    MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR
*    NON-INFRINGEMENT. Please see the License for the specific language
*    governing rights and limitations under the License.
*
*  ========================================================================
*
* Description:  WHEN YOU FIGURE OUT WHAT THIS FILE DOES, PLEASE
*               DESCRIBE IT HERE!
*
****************************************************************************/


/*
TTLBTREE:  topic-offset-to-topic-title mapping
*/

#include "ttlbtree.h"
#include <string.h>


//
//  TTLKey  --"Key" data type for class HFTtlbtree.
//

class TTLKey : public BtreeData
{
protected:
    uint_32     _offset;

    // Overriding the BtreeData virtual functions.
    BtreeData       *myKey();
    int         lessThan( BtreeData *other );
    virtual uint_32 size();
    virtual int     dump( OutFile * dest );

    TTLKey( uint_32 off ) : _offset( off ) {};
};


//
//  TTLRec  --"Record" data type for class HFTtlbtree.
//

class TTLRec : public TTLKey
{
    char    *_title;

    // Overriding the TTLKey virtual functions.
    uint_32 size();
    int     dump( OutFile * dest );

    TTLRec( TTLRec const & ) : TTLKey(0) {};
    TTLRec &    operator=( TTLRec const & ){ return *this; };

public:
    TTLRec( uint_32 off, char const string[] );
    ~TTLRec();
};


//  TTLKey::myKey   --Overrides BtreeData::myKey.

BtreeData *TTLKey::myKey()
{
    return new TTLKey( _offset );
}


//  TTLKey::lessThan    --Overrides BtreeData::lessThan.

int TTLKey::lessThan( BtreeData * other )
{
    TTLKey  *trueother = (TTLKey*) other;
    return _offset < trueother->_offset;
}


//  TTLKey::size

uint_32 TTLKey::size()
{
    return sizeof( uint_32 );
}


//  TTLKey::dump

int TTLKey::dump( OutFile * dest )
{
    dest->writebuf( &_offset, sizeof( uint_32 ), 1 );
    return 1;
}


//  TTLRec::TTLRec

TTLRec::TTLRec( uint_32 off, char const string[] )
    : TTLKey( off )
{
    int len = strlen( string ) + 1;
    _title = new char[ len ];
    strncpy( _title, string, len );
}


//  TTLRec::~TTLRec

TTLRec::~TTLRec()
{
    delete[] _title;
}


//  TTLRec::size

uint_32 TTLRec::size()
{
    uint_32 result = 5 + strlen( _title );
    return result;
}


//  TTLRec::dump

int TTLRec::dump( OutFile * dest )
{
    dest->writebuf( &_offset, sizeof( uint_32 ), 1 );
    dest->writebuf( _title, 1, strlen( _title ) + 1 );
    return 1;
}


char const HFTtlbtree::_titleMagic[Btree::_magNumSize] = {
                        0x3B, 0x29, 0x02, 0x00, 0x00,
                    0x08, 0x4C, 0x7A, 0x00, 0x00,
                    0x00, 0x00, 0x00, 0x00, 0x00,
                    0x00, 0x00, 0x00, 0x00, 0x00,
                    0x00, 0x00
};


//  HFTtlbtree::HFTtlbtree

HFTtlbtree::HFTtlbtree( HFSDirectory * d_file )
{
    _titles = new Btree( _titleMagic );
    d_file->addFile( this, "|TTLBTREE" );
}


//  HFTtlbtree::~HFTtlbtree

HFTtlbtree::~HFTtlbtree()
{
    delete _titles;
}


//  HFTtlbtree::addTitle

HFTtlbtree::addTitle( uint_32 offset, char const title[] )
{
    TTLRec  *newrec = new TTLRec( offset, title );
    _titles->insert( newrec );
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?