This action will force synchronization from nwsuafzq/MySQLAdvisor, which will overwrite any changes that you have made since you forked the repository, and can not be recovered!!!
Synchronous operation will process in the background and will refresh the page when finishing processing. Please be patient.
#ifndef SQL_ARRAY_INCLUDED#define SQL_ARRAY_INCLUDED/* Copyright (c) 2005, 2012, 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 */#include <my_sys.h>/**A wrapper class which provides array bounds checking.We do *not* own the array, we simply have a pointer to the first element,and a length.@remarkWe want the compiler-generated versions of:- the copy CTOR (memberwise initialization)- the assignment operator (memberwise assignment)@param Element_type The type of the elements of the container.*/template <typename Element_type> class Bounds_checked_array{public:Bounds_checked_array() : m_array(NULL), m_size(0) {}Bounds_checked_array(Element_type *el, size_t size): m_array(el), m_size(size){}void reset() { m_array= NULL; m_size= 0; }void reset(Element_type *array, size_t size){m_array= array;m_size= size;}/**Set a new bound on the array. Does not resize the underlyingarray, so the new size must be smaller than or equal to thecurrent size.*/void resize(size_t new_size){DBUG_ASSERT(new_size <= m_size);m_size= new_size;}Element_type &operator[](size_t n){DBUG_ASSERT(n < m_size);return m_array[n];}const Element_type &operator[](size_t n) const{DBUG_ASSERT(n < m_size);return m_array[n];}size_t element_size() const { return sizeof(Element_type); }size_t size() const { return m_size; }bool is_null() const { return m_array == NULL; }void pop_front(){DBUG_ASSERT(m_size > 0);m_array+= 1;m_size-= 1;}Element_type *array() const { return m_array; }bool operator==(const Bounds_checked_array<Element_type>&rhs) const{return m_array == rhs.m_array && m_size == rhs.m_size;}bool operator!=(const Bounds_checked_array<Element_type>&rhs) const{return m_array != rhs.m_array || m_size != rhs.m_size;}private:Element_type *m_array;size_t m_size;};/*A typesafe wrapper around DYNAMIC_ARRAY*/template <class Elem> class Dynamic_array{DYNAMIC_ARRAY array;public:Dynamic_array(uint prealloc=16, uint increment=16){init(prealloc, increment);}void init(uint prealloc=16, uint increment=16){my_init_dynamic_array(&array, sizeof(Elem), prealloc, increment);}/**@note Though formally this could be declared "const" it would bemisleading at it returns a non-const pointer to array's data.*/Elem& at(int idx){return *(((Elem*)array.buffer) + idx);}/// Const variant of at(), which cannot change dataconst Elem& at(int idx) const{return *(((Elem*)array.buffer) + idx);}/// @returns pointer to first element; undefined behaviour if array is emptyElem *front(){DBUG_ASSERT(array.elements >= 1);return (Elem*)array.buffer;}/// @returns pointer to first element; undefined behaviour if array is emptyconst Elem *front() const{DBUG_ASSERT(array.elements >= 1);return (const Elem*)array.buffer;}/// @returns pointer to last element; undefined behaviour if array is empty.Elem *back(){DBUG_ASSERT(array.elements >= 1);return ((Elem*)array.buffer) + (array.elements - 1);}/// @returns pointer to last element; undefined behaviour if array is empty.const Elem *back() const{DBUG_ASSERT(array.elements >= 1);return ((const Elem*)array.buffer) + (array.elements - 1);}/**@retval false ok@retval true OOM, @c my_error() has been called.*/bool append(const Elem &el){return insert_dynamic(&array, &el);}/// Pops the last element. Does nothing if array is empty.Elem& pop(){return *((Elem*)pop_dynamic(&array));}void del(uint idx){delete_dynamic_element(&array, idx);}int elements() const{return array.elements;}void elements(uint num_elements){DBUG_ASSERT(num_elements <= array.max_element);array.elements= num_elements;}void clear(){elements(0);}void set(uint idx, const Elem &el){set_dynamic(&array, &el, idx);}~Dynamic_array(){delete_dynamic(&array);}typedef int (*CMP_FUNC)(const Elem *el1, const Elem *el2);void sort(CMP_FUNC cmp_func){my_qsort(array.buffer, array.elements, sizeof(Elem), (qsort_cmp)cmp_func);}};#endif /* SQL_ARRAY_INCLUDED */
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。