同步操作将从 nwsuafzq/MySQLAdvisor 强制同步,此操作会覆盖自 Fork 仓库以来所做的任何修改,且无法恢复!!!
确定后同步将在后台操作,完成时将刷新页面,请耐心等待。
/* Copyright (c) 2003, 2013, Oracle and/or its affiliates. All rights reserved.This program is free software; you can redistribute it and/or modifyit under the terms of the GNU General Public License as published bythe Free Software Foundation; version 2 of the License.This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; without even the implied warranty ofMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See theGNU General Public License for more details.You should have received a copy of the GNU General Public Licensealong with this program; if not, write to the Free Software Foundation,51 Franklin Street, Suite 500, Boston, MA 02110-1335 USA *//*Implementation of a bitmap type.The idea with this is to be able to handle any constant number of bits butalso be able to use 32 or 64 bits bitmaps very efficiently*/#ifndef SQL_BITMAP_INCLUDED#define SQL_BITMAP_INCLUDED#include <my_sys.h>#include <my_bitmap.h>template <uint default_width> class Bitmap{MY_BITMAP map;uint32 buffer[(default_width+31)/32];public:Bitmap() { init(); }Bitmap(const Bitmap& from) { *this=from; }explicit Bitmap(uint prefix_to_set) { init(prefix_to_set); }void init() { bitmap_init(&map, buffer, default_width, 0); }void init(uint prefix_to_set) { init(); set_prefix(prefix_to_set); }uint length() const { return default_width; }Bitmap& operator=(const Bitmap& map2){init();memcpy(buffer, map2.buffer, sizeof(buffer));return *this;}void set_bit(uint n) { bitmap_set_bit(&map, n); }void clear_bit(uint n) { bitmap_clear_bit(&map, n); }void set_prefix(uint n) { bitmap_set_prefix(&map, n); }void set_all() { bitmap_set_all(&map); }void clear_all() { bitmap_clear_all(&map); }void intersect(const Bitmap& map2) { bitmap_intersect(&map, &map2.map); }void intersect(ulonglong map2buff){MY_BITMAP map2;ulonglong buf;/* bitmap_init() zeroes the supplied buffer */bitmap_init(&map2, (uint32 *)&buf, sizeof(ulonglong)*8, 0);buf= map2buff;bitmap_intersect(&map, &map2);}/* Use highest bit for all bits above sizeof(ulonglong)*8. */void intersect_extended(ulonglong map2buff){intersect(map2buff);if (map.n_bits > sizeof(ulonglong) * 8)bitmap_set_above(&map, sizeof(ulonglong),MY_TEST(map2buff & (LL(1) << (sizeof(ulonglong) * 8 - 1))));}void subtract(const Bitmap& map2) { bitmap_subtract(&map, &map2.map); }void merge(const Bitmap& map2) { bitmap_union(&map, &map2.map); }my_bool is_set(uint n) const { return bitmap_is_set(&map, n); }my_bool is_prefix(uint n) const { return bitmap_is_prefix(&map, n); }my_bool is_clear_all() const { return bitmap_is_clear_all(&map); }my_bool is_set_all() const { return bitmap_is_set_all(&map); }my_bool is_subset(const Bitmap& map2) const { return bitmap_is_subset(&map, &map2.map); }my_bool is_overlapping(const Bitmap& map2) const { return bitmap_is_overlapping(&map, &map2.map); }my_bool operator==(const Bitmap& map2) const { return bitmap_cmp(&map, &map2.map); }my_bool operator!=(const Bitmap& map2) const { return !(*this == map2); }char *print(char *buf) const{char *s=buf;const uchar *e=(uchar *)buffer, *b=e+sizeof(buffer)-1;while (!*b && b>e)b--;if ((*s=_dig_vec_upper[*b >> 4]) != '0')s++;*s++=_dig_vec_upper[*b & 15];while (--b>=e){*s++=_dig_vec_upper[*b >> 4];*s++=_dig_vec_upper[*b & 15];}*s=0;return buf;}ulonglong to_ulonglong() const{if (sizeof(buffer) >= 8)return uint8korr((uchar *) buffer);DBUG_ASSERT(sizeof(buffer) >= 4);return (ulonglong) uint4korr((uchar *) buffer);}uint bits_set() const { return bitmap_bits_set(&map); }};template <> class Bitmap<64>{ulonglong map;public:Bitmap<64>() { init(); }enum { ALL_BITS = 64 };#if defined(__NETWARE__) || defined(__MWERKS__)/*Metwork compiler gives error on Bitmap<64>Changed to Bitmap, since in this case also it will proper constructthis class*/explicit Bitmap(uint prefix_to_set) { set_prefix(prefix_to_set); }#elseexplicit Bitmap<64>(uint prefix_to_set) { set_prefix(prefix_to_set); }#endifvoid init() { clear_all(); }void init(uint prefix_to_set) { set_prefix(prefix_to_set); }uint length() const { return 64; }void set_bit(uint n) { map|= ((ulonglong)1) << n; }void clear_bit(uint n) { map&= ~(((ulonglong)1) << n); }void set_prefix(uint n){if (n >= length())set_all();elsemap= (((ulonglong)1) << n)-1;}void set_all() { map=~(ulonglong)0; }void clear_all() { map=(ulonglong)0; }void intersect(const Bitmap<64>& map2) { map&= map2.map; }void intersect(ulonglong map2) { map&= map2; }void intersect_extended(ulonglong map2) { map&= map2; }void subtract(const Bitmap<64>& map2) { map&= ~map2.map; }void merge(const Bitmap<64>& map2) { map|= map2.map; }my_bool is_set(uint n) const { return MY_TEST(map & (((ulonglong)1) << n)); }my_bool is_prefix(uint n) const { return map == (((ulonglong)1) << n)-1; }my_bool is_clear_all() const { return map == (ulonglong)0; }my_bool is_set_all() const { return map == ~(ulonglong)0; }my_bool is_subset(const Bitmap<64>& map2) const { return !(map & ~map2.map); }my_bool is_overlapping(const Bitmap<64>& map2) const { return (map & map2.map)!= 0; }my_bool operator==(const Bitmap<64>& map2) const { return map == map2.map; }my_bool operator!=(const Bitmap<64>& map2) const { return !(*this == map2); }char *print(char *buf) const { longlong2str(map,buf,16); return buf; }ulonglong to_ulonglong() const { return map; }};/* An iterator to quickly walk over bits in unlonglong bitmap. */class Table_map_iterator{ulonglong bmp;uint no;public:Table_map_iterator(ulonglong t) : bmp(t), no(0) {}int next_bit(){static const char last_bit[16]= {32, 0, 1, 0,2, 0, 1, 0,3, 0, 1, 0,2, 0, 1, 0};uint bit;while ((bit= last_bit[bmp & 0xF]) == 32){no += 4;bmp= bmp >> 4;if (!bmp)return BITMAP_END;}bmp &= ~(1LL << bit);return no + bit;}enum { BITMAP_END= 64 };};#endif /* SQL_BITMAP_INCLUDED */
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。