⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 rectangle.h

📁 FastDb是高效的内存数据库系统
💻 H
字号:
//-< RECTANGLE.H >---------------------------------------------------*--------*// FastDB                   Version 1.0         (c) 1999  GARRET     *     ?  *// (Post Relational Database Management System)                      *   /\|  *//                                                                   *  /  \  *//                          Created:     26-Nov-2001  K.A. Knizhnik  * / [] \ *//                          Last update: 26-Nov-2001  K.A. Knizhnik  * GARRET *//-------------------------------------------------------------------*--------*// Rectangle class//-------------------------------------------------------------------*--------*#ifndef __RECTANGLE_H__#define __RECTANGLE_H__BEGIN_FASTDB_NAMESPACE#ifndef RECTANGLE_DIMENSION#define RECTANGLE_DIMENSION 2#endif #ifndef RECTANGLE_COORDINATE_TYPE#define RECTANGLE_COORDINATE_TYPE int4#define RECTANGLE_AREA_TYPE int8#endiftypedef RECTANGLE_COORDINATE_TYPE coord_t;typedef RECTANGLE_AREA_TYPE       area_t;/** * Multidimensional rectangle */class FASTDB_DLL_ENTRY rectangle{  public:    enum { dim = RECTANGLE_DIMENSION };    /**      * Boundary array contains coordinates of two vertices specifying rectangle      * of "dim" dimmension. First vertex has coordinaes (boundary[0], ..., boundary[dim])     * Second vertext has coordinates (boundary[dim], ..., boundary[dim*2-1])     * Precondition: for i = 0, dim : boundary[i] <= boundary[dim+i]     */    coord_t boundary[dim*2];    /**     * Calculate distance between two rectangles     */    friend coord_t FASTDB_DLL_ENTRY distance(rectangle const& r, rectangle const& q);    /**     * Caclulate area of rectangle     */    friend area_t area(rectangle const& r) {         area_t area = 1;        for (int i = dim; --i >= 0; area *= r.boundary[i+dim] - r.boundary[i]);        return area;    }    /**     * Join two rectangles: construct enveloping rectangle     */    void operator +=(rectangle const& r) {         int i = dim;         while (--i >= 0) {             boundary[i] = (boundary[i] <= r.boundary[i])                 ? boundary[i] : r.boundary[i];            boundary[i+dim] = (boundary[i+dim] >= r.boundary[i+dim])                 ? boundary[i+dim] : r.boundary[i+dim];        }    }    /**     * Join two rectangles: construct enveloping rectangle     */    rectangle operator + (rectangle const& r) const {         rectangle res;        int i = dim;         while (--i >= 0) {             res.boundary[i] = (boundary[i] <= r.boundary[i])                 ? boundary[i] : r.boundary[i];            res.boundary[i+dim] = (boundary[i+dim] >= r.boundary[i+dim])                 ? boundary[i+dim] : r.boundary[i+dim];        }        return res;    }    /**     * Intersect two rectangles     */    bool operator & (rectangle const& r) const {        int i = dim;         while (--i >= 0) {             if (boundary[i] > r.boundary[i+dim] ||                r.boundary[i] > boundary[i+dim])            {                return false;            }        }        return true;    }    /**     * Check if rectangle is part of other rectanle     * @return <code>true</code> if this rectangle is part of rectangle <code>r</code>     */    bool operator <= (rectangle const& r) const {         int i = dim;         while (--i >= 0) {             if (boundary[i] < r.boundary[i] ||                boundary[i+dim] > r.boundary[i+dim])            {                return false;            }        }        return true;    }    /**     * Check if rectangle is part of other rectanle     * @return <code>true</code> if this rectangle contains rectangle <code>r</code>     */    bool operator >= (rectangle const& r) const {         int i = dim;         while (--i >= 0) {             if (r.boundary[i] < boundary[i] ||                r.boundary[i+dim] > boundary[i+dim])            {                return false;            }        }        return true;    }    /**     * Check if rectangle is strict subpart of other rectanle     * @return <code>true</code> if this rectangle is part of rectangle <code>r</code> and not the same     */    bool operator < (rectangle const& r) const {         return *this <= r && *this != r;    }    /**     * Check if rectangle is strict subpart of other rectanle     * @return <code>true</code> if this rectangle contains rectangle <code>r</code> and not the same     */    bool operator > (rectangle const& r) const {         return *this >= r && *this != r;    }    /**     * Check if two rectangle are the same     */    bool operator == (rectangle const& r) const {         int i = dim*2;         while (--i >= 0) {             if (boundary[i] != r.boundary[i]) {                 return false;            }        }        return true;    }    /**     * Check if two rectangle are not the same     */        bool operator != (rectangle const& r) const {         int i = dim*2;         while (--i >= 0) {             if (boundary[i] != r.boundary[i]) {                 return true;            }        }        return false;    }    typedef bool (rectangle::*comparator)(rectangle const& r) const;};END_FASTDB_NAMESPACE#endif

⌨️ 快捷键说明

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