亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? demangle.h

?? mingw32.rar
?? H
?? 第 1 頁 / 共 5 頁
字號:
// C++ IA64 / g++ v3 demangler  -*- C++ -*-

// Copyright (C) 2003, 2004 Free Software Foundation, Inc.
// Written by Carlo Wood <carlo@alinoe.com>
//
// This file is part of the GNU ISO C++ Library.  This library is free
// software; you can redistribute it and/or modify it under the
// terms of the GNU General Public License as published by the
// Free Software Foundation; either version 2, or (at your option)
// any later version.

// This library is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
// GNU General Public License for more details.

// You should have received a copy of the GNU General Public License along
// with this library; see the file COPYING.  If not, write to the Free
// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
// USA.

// As a special exception, you may use this file as part of a free software
// library without restriction.  Specifically, if other files instantiate
// templates or use macros or inline functions from this file, or you compile
// this file and link it with other files to produce an executable, this
// file does not by itself cause the resulting executable to be covered by
// the GNU General Public License.  This exception does not however
// invalidate any other reasons why the executable file might be covered by
// the GNU General Public License.

// This file implements demangling of "C++ ABI for Itanium"-mangled symbol
// and type names as described in Revision 1.73 of the C++ ABI as can be found
// at http://www.codesourcery.com/cxx-abi/abi.html#mangling

#ifndef _DEMANGLER_H
#define _DEMANGLER_H 1

#include <vector>
#include <string>
#include <ext/new_allocator.h>

#ifndef _GLIBCXX_DEMANGLER_DEBUG
#define _GLIBCXX_DEMANGLER_CWDEBUG 0
#define _GLIBCXX_DEMANGLER_DEBUG(x)
#define _GLIBCXX_DEMANGLER_DOUT(cntrl, data)
#define _GLIBCXX_DEMANGLER_DOUT_ENTERING(x)
#define _GLIBCXX_DEMANGLER_DOUT_ENTERING2(x)
#define _GLIBCXX_DEMANGLER_DOUT_ENTERING3(x)
#define _GLIBCXX_DEMANGLER_RETURN return M_result
#define _GLIBCXX_DEMANGLER_RETURN2 return M_result
#define _GLIBCXX_DEMANGLER_RETURN3
#define _GLIBCXX_DEMANGLER_FAILURE \
    do { M_result = false; return false; } while(0)
#else
#define _GLIBCXX_DEMANGLER_CWDEBUG 1
#endif

namespace __gnu_cxx
{
  namespace demangler
  {
    enum substitution_nt
    {
      type,
      template_template_param,
      nested_name_prefix,
      nested_name_template_prefix,
      unscoped_template_name
    };

    struct substitution_st
    {
      int M_start_pos;
      substitution_nt M_type;
      int M_number_of_prefixes;

      substitution_st(int start_pos,
		      substitution_nt type,
		      int number_of_prefixes)
      : M_start_pos(start_pos), M_type(type),
	M_number_of_prefixes(number_of_prefixes)
      { }
    };

    enum simple_qualifier_nt
    {
      complex_or_imaginary = 'G',
      pointer = 'P',
      reference = 'R'
    };

    enum cv_qualifier_nt
    {
      cv_qualifier = 'K'
    };

    enum param_qualifier_nt
    {
      vendor_extension = 'U',
      array = 'A',
      pointer_to_member = 'M'
    };

    template<typename Tp, typename Allocator = __gnu_cxx::new_allocator<Tp> >
      class qualifier;

    template<typename Tp, typename Allocator = __gnu_cxx::new_allocator<Tp> >
      class qualifier_list;

    template<typename Tp, typename Allocator = __gnu_cxx::new_allocator<Tp> >
      class session;

    template<typename Tp, typename Allocator>
      class qualifier
      {
	typedef typename Allocator::template rebind<char>::other
	        char_Allocator;
	typedef std::basic_string<char, std::char_traits<char>, char_Allocator>
	    string_type;

      private:
	char M_qualifier1;
	char M_qualifier2;
	char M_qualifier3;
	mutable unsigned char M_cnt;
	string_type M_optional_type;
	int M_start_pos;
	bool M_part_of_substitution;

      public:
	qualifier(int start_pos,
	          simple_qualifier_nt simple_qualifier,
		  int inside_substitution)
	: M_qualifier1(simple_qualifier),
	  M_start_pos(start_pos),
	  M_part_of_substitution(inside_substitution)
	{ }

	qualifier(int start_pos,
	          cv_qualifier_nt,
		  char const* start,
		  int count,
		  int inside_substitution)
	: M_qualifier1(start[0]),
	  M_qualifier2((count > 1) ? start[1] : '\0'),
	  M_qualifier3((count > 2) ? start[2] : '\0'),
	  M_start_pos(start_pos),
	  M_part_of_substitution(inside_substitution)
	{ }

	qualifier(int start_pos,
	          param_qualifier_nt param_qualifier,
		  string_type optional_type,
		  int inside_substitution)
	: M_qualifier1(param_qualifier),
	  M_optional_type(optional_type),
	  M_start_pos(start_pos),
	  M_part_of_substitution(inside_substitution)
	{ }

	int
	get_start_pos(void) const
	{ return M_start_pos; }

	char
	first_qualifier(void) const
	{ M_cnt = 1; return M_qualifier1; }

	char
	next_qualifier(void) const
	{
	  return (++M_cnt == 2) ? M_qualifier2
	                        : ((M_cnt == 3) ? M_qualifier3 : 0);
	}

	string_type const&
	get_optional_type(void) const
	{ return M_optional_type; }

	bool
	part_of_substitution(void) const
	{ return M_part_of_substitution; }

#if _GLIBCXX_DEMANGLER_CWDEBUG
	friend std::ostream& operator<<(std::ostream& os, qualifier const& qual)
	{
	  os << (char)qual.M_qualifier1;
	  if (qual.M_qualifier1 == vendor_extension ||
	      qual.M_qualifier1 == array ||
	      qual.M_qualifier1 == pointer_to_member)
	    os << " [" << qual.M_optional_type << ']';
	  else if (qual.M_qualifier1 == 'K' ||
		   qual.M_qualifier1 == 'V' ||
		   qual.M_qualifier1 == 'r')
	  {
	    if (qual.M_qualifier2)
	    {
	      os << (char)qual.M_qualifier2;
	      if (qual.M_qualifier3)
		os << (char)qual.M_qualifier3;
	    }
	  }
	  return os;
	}
#endif
      };

    template<typename Tp, typename Allocator>
      class qualifier_list
      {
	typedef typename Allocator::template rebind<char>::other
	  char_Allocator;
	typedef std::basic_string<char, std::char_traits<char>, char_Allocator>
	  string_type;

      private:
	mutable bool M_printing_suppressed;
	typedef qualifier<Tp, Allocator> qual;
        typedef typename Allocator::template rebind<qual>::other qual_Allocator;
	typedef std::vector<qual, qual_Allocator> qual_vector;
	qual_vector M_qualifier_starts;
	session<Tp, Allocator>& M_demangler;

	void decode_KVrA(string_type& prefix, string_type& postfix, int cvq,
			 typename qual_vector::
			   const_reverse_iterator const& iter_array) const;

      public:
	qualifier_list(session<Tp, Allocator>& demangler_obj)
	: M_printing_suppressed(false), M_demangler(demangler_obj)
	{ }

	void
	add_qualifier_start(simple_qualifier_nt simple_qualifier,
			    int start_pos,
			    int inside_substitution)
	{ M_qualifier_starts.
	      push_back(qualifier<Tp, Allocator>(start_pos,
		  simple_qualifier, inside_substitution)); }

	void
	add_qualifier_start(cv_qualifier_nt cv_qualifier,
			    int start_pos,
			    int count,
			    int inside_substitution)
	{ M_qualifier_starts.
	      push_back(qualifier<Tp, Allocator>(start_pos,
		    cv_qualifier, &M_demangler.M_str[start_pos],
		    count, inside_substitution)); }

	void
	add_qualifier_start(param_qualifier_nt param_qualifier,
			    int start_pos,
			    string_type optional_type,
			    int inside_substitution)
	{ M_qualifier_starts.
	      push_back(qualifier<Tp, Allocator>(start_pos,
		    param_qualifier, optional_type, inside_substitution)); }

	void
	decode_qualifiers(string_type& prefix,
			  string_type& postfix,
			  bool member_function_pointer_qualifiers) const;

	bool
	suppressed(void) const
	{ return M_printing_suppressed; }

	void
	printing_suppressed(void)
	{ M_printing_suppressed = true; }

	size_t
	size(void) const
	{ return M_qualifier_starts.size(); }

#if _GLIBCXX_DEMANGLER_CWDEBUG
	friend std::ostream& operator<<(std::ostream& os, qualifier_list const& list)
	{
	  typename qual_vector::const_iterator
	      iter = list.M_qualifier_starts.begin();
	  if (iter != list.M_qualifier_starts.end())
	  {
	    os << "{ " << *iter;
	    while (++iter != list.M_qualifier_starts.end())
	      os << ", " << *iter;
	    os << " }";
	  }
	  else
	    os << "{ }";
	  return os;
	}
#endif
      };

    struct implementation_details
    {
      private:
        unsigned int M_style;

      public:
	// The following flags change the behaviour of the demangler.  The
	// default behaviour is that none of these flags is set.

        static unsigned int const style_void = 1;
	// Default behaviour:				int f()
	// Use (void) instead of ():			int f(void)

        static unsigned int const style_literal = 2;
	// Default behaviour:				(long)13,
	//						(unsigned long long)19
	// Use extensions 'u', 'l' and 'll' for integral
	// literals (as in template arguments):		13l, 19ull

        static unsigned int const style_literal_int = 4;
	// Default behaviour:				4
	// Use also an explicit
	//   cast for int in literals:			(int)4

        static unsigned int const style_compact_expr_ops = 8;
	// Default behaviour:				(i) < (3), sizeof (int)
	// Don't output spaces around
	//   operators in expressions:			(i)<(3), sizeof(int)

        static unsigned int const style_sizeof_typename = 16;
	// Default behaviour:				sizeof (X::t)
	// Put 'typename' infront of <nested-name>
	// types inside a 'sizeof':			sizeof (typename X::t)

      public:
	implementation_details(unsigned int style_flags = 0) :
	    M_style(style_flags) { }
	virtual ~implementation_details() { }
	bool get_style_void(void) const
	    { return (M_style & style_void); }
	bool get_style_literal(void) const
	    { return (M_style & style_literal); }
	bool get_style_literal_int(void) const
	    { return (M_style & style_literal_int); }
	bool get_style_compact_expr_ops(void) const
	    { return (M_style & style_compact_expr_ops); }
	bool get_style_sizeof_typename(void) const
	    { return (M_style & style_sizeof_typename); }
        // This can be overridden by user implementations.
        virtual bool decode_real(char* /* output */, unsigned long* /* input */,
				 size_t /* size_of_real */) const
            { return false; }
    };

    template<typename Tp, typename Allocator>
      class session
      {
      public:
	friend class qualifier_list<Tp, Allocator>;
	typedef typename Allocator::template rebind<char>::other
	    char_Allocator;
	typedef std::basic_string<char, std::char_traits<char>, char_Allocator>
	    string_type;

      private:
	char const* M_str;
	int M_pos;
	int M_maxpos;
	bool M_result;
	int M_inside_template_args;
	int M_inside_type;
	int M_inside_substitution;
	bool M_saw_destructor;
	bool M_name_is_cdtor;
	bool M_name_is_template;
	bool M_name_is_conversion_operator;
	bool M_template_args_need_space;
	string_type M_function_name;
        typedef typename Allocator::template rebind<int>::other
                int_Allocator;
        typedef typename Allocator::template rebind<substitution_st>::other
                subst_Allocator;
	std::vector<int, int_Allocator> M_template_arg_pos;
	int M_template_arg_pos_offset;
	std::vector<substitution_st, subst_Allocator> M_substitutions_pos;
	implementation_details const& M_implementation_details;
	typedef typename Allocator::template
	    rebind<qualifier_list<Allocator> >::other qualifier_list_Allocator;
	qualifier_list_Allocator M_qualifier_list_alloc;
#if _GLIBCXX_DEMANGLER_CWDEBUG
	bool M_inside_add_substitution;
#endif

      public:
	explicit session(char const* in, int len,
	    implementation_details const& id = implementation_details())
	: M_str(in), M_pos(0), M_maxpos(len - 1), M_result(true),
	  M_inside_template_args(0), M_inside_type(0),
	  M_inside_substitution(0), M_saw_destructor(false),
	  M_name_is_cdtor(false), M_name_is_template(false),
	  M_name_is_conversion_operator(false),
	  M_template_args_need_space(false), M_template_arg_pos_offset(0),
	  M_implementation_details(id)
#if _GLIBCXX_DEMANGLER_CWDEBUG
	  , M_inside_add_substitution(false)
#endif
	{ }

	static int
	decode_encoding(string_type& output, char const* input, int len,
	  implementation_details const& id = implementation_details());

	bool
	decode_type(string_type& output,
	            qualifier_list<Tp, Allocator>* qualifiers = NULL)
	{
	  string_type postfix;
	  bool res = decode_type_with_postfix(output, postfix, qualifiers);
	  output += postfix;
	  return res;
	}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
午夜婷婷国产麻豆精品| 日韩精品最新网址| 国产欧美精品一区aⅴ影院| 丝袜脚交一区二区| 精品国产sm最大网站免费看| 国产精品白丝av| 国产欧美日韩在线看| 精品国产一区久久| 久久噜噜亚洲综合| 一本一道综合狠狠老| 日韩福利电影在线| 国产精品免费人成网站| 欧美性色欧美a在线播放| 老司机免费视频一区二区三区| 国产蜜臀97一区二区三区| 久久精品人人做| 717成人午夜免费福利电影| 国产一区二区看久久| 亚洲一级二级在线| 中文字幕不卡三区| 精品欧美一区二区久久| 一本久久综合亚洲鲁鲁五月天 | 国产欧美精品在线观看| 久久日韩精品一区二区五区| 91丝袜美腿高跟国产极品老师 | 综合色中文字幕| 精品国产第一区二区三区观看体验| 精品国产伦一区二区三区观看方式 | 精品一区二区三区免费毛片爱| 亚洲欧美日韩久久精品| 精品少妇一区二区三区日产乱码 | 美女精品自拍一二三四| 亚洲不卡一区二区三区| 一区二区三区毛片| 国产欧美日韩麻豆91| ...中文天堂在线一区| 亚洲国产成人自拍| 亚洲影视在线观看| 韩国成人在线视频| 亚洲一区二区在线播放相泽| 免费观看在线综合| 麻豆精品新av中文字幕| 成人精品小蝌蚪| 国产一区啦啦啦在线观看| 色噜噜偷拍精品综合在线| 91啪亚洲精品| 精品精品欲导航| 一区二区三区四区精品在线视频| 极品少妇xxxx精品少妇偷拍 | 精品视频123区在线观看| 91视频精品在这里| 精品播放一区二区| 婷婷六月综合网| 一本色道久久综合精品竹菊| 久久免费电影网| 免费精品视频最新在线| 欧美日韩一二三| 亚洲欧美在线另类| 国产高清精品久久久久| 99久久国产综合精品色伊| 97se亚洲国产综合在线| 久久中文娱乐网| 美国一区二区三区在线播放| 欧美精品久久天天躁| 欧美一级精品大片| 国产视频在线观看一区二区三区| 午夜久久电影网| 欧美少妇xxx| 亚洲一区二区不卡免费| 色综合久久综合中文综合网| 自拍偷拍亚洲激情| 97精品国产97久久久久久久久久久久| 欧美电视剧免费全集观看| 日韩av二区在线播放| 欧美日韩成人一区| 久久天天做天天爱综合色| 免费成人在线播放| 日韩免费性生活视频播放| 天堂va蜜桃一区二区三区| 欧美这里有精品| 久久你懂得1024| 精品一区二区三区在线播放| 欧美一区国产二区| 亚洲免费电影在线| 91老司机福利 在线| 一区二区三区成人在线视频| 一本一本大道香蕉久在线精品| 亚洲少妇最新在线视频| 色琪琪一区二区三区亚洲区| 亚洲精品视频在线| 国产一区二区三区香蕉| 久久久www成人免费毛片麻豆| 国产麻豆一精品一av一免费| 国产精品理论在线观看| 久久超碰97人人做人人爱| www亚洲一区| 91在线免费播放| 性做久久久久久久免费看| 日韩一区二区三区四区五区六区| 理论电影国产精品| 中文字幕亚洲在| 欧美日韩激情一区二区| 久久成人免费日本黄色| 中文字幕一区二区三区色视频| 日本韩国欧美一区二区三区| 日韩av中文字幕一区二区三区| 精品久久一二三区| eeuss鲁一区二区三区| 久久久久久一二三区| 成人激情开心网| 国产欧美1区2区3区| 99久久精品国产导航| 视频一区中文字幕国产| 欧美高清在线一区| 欧美精品三级日韩久久| 懂色av中文字幕一区二区三区 | 精品国产一二三区| 91免费在线视频观看| 久久99久久99| 亚洲制服丝袜在线| 日本一区二区在线不卡| 91麻豆精品国产无毒不卡在线观看| 国产伦精一区二区三区| 亚洲高清在线视频| 欧美片网站yy| 不卡的av中国片| 久久精品久久综合| 夜夜爽夜夜爽精品视频| 久久综合网色—综合色88| 欧美日本不卡视频| 91视视频在线观看入口直接观看www | 日本视频在线一区| 亚洲精品国产精华液| 国产日韩视频一区二区三区| 欧美一区二区三区四区在线观看| av在线不卡免费看| 国产一区二区三区av电影| 日本中文在线一区| 亚洲电影视频在线| 一区二区三区欧美亚洲| 国产精品女同一区二区三区| 精品成人a区在线观看| 欧美成人a视频| 日韩一区二区三区在线观看| 欧美猛男超大videosgay| 色综合色狠狠天天综合色| 91一区一区三区| 99国内精品久久| 99re这里只有精品视频首页| 成人av电影免费观看| 国产69精品久久久久777| 国产精品综合二区| 久久99久久久久| 久久精品国产色蜜蜜麻豆| 美女网站一区二区| 久久精品99久久久| 国产一区二区三区四区在线观看| 精品一区二区在线视频| 国内精品久久久久影院薰衣草 | 日日摸夜夜添夜夜添精品视频| 亚洲专区一二三| 五月婷婷欧美视频| 日韩成人精品视频| 久久99国产精品免费网站| 国内精品不卡在线| thepron国产精品| 色婷婷国产精品| 欧美日韩一级视频| 欧美丰满高潮xxxx喷水动漫| 欧美一级黄色录像| 国产女同互慰高潮91漫画| 中文在线资源观看网站视频免费不卡 | 国产成人av电影在线| 丁香婷婷综合激情五月色| 91在线看国产| 欧美日本精品一区二区三区| 精品精品欲导航| 中文字幕一区二区日韩精品绯色| 一区二区三区四区不卡视频| 日韩激情一二三区| 国内国产精品久久| 在线亚洲精品福利网址导航| 在线不卡中文字幕| 国产女同性恋一区二区| 亚洲一区影音先锋| 麻豆精品视频在线观看免费| 风流少妇一区二区| 欧美日韩激情一区二区三区| 2020国产精品自拍| 一区二区三区美女视频| 久久精品国产网站| 日本久久电影网| 欧美精品一区二区三区四区| 一区二区三区鲁丝不卡| 免费成人在线网站| 日本道精品一区二区三区 | 国产日韩欧美精品综合| 亚洲一区自拍偷拍| 国产91精品久久久久久久网曝门| 欧美三级电影一区|