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

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

?? list.h

?? VC++視頻音頻開發實用工程案例精選.rar配套光盤代碼。
?? H
字號:
//	VirtualDub 2.x (Nina) - Video processing and capture application
//	Copyright (C) 1998-2001 Avery Lee, All Rights Reserved.
//
//	This program 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 of the License, or
//	(at your option) any later version.
//
//	This program 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 program; if not, write to the Free Software
//	Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.

#ifndef f_LIST_H
#define f_LIST_H

class ListNode {
public:
	ListNode *next, *prev;

	void Remove() {
		next->prev = prev;
		prev->next = next;
#ifdef _DEBUG
		prev = next = 0;
#endif
	}

	void InsertAfter(ListNode *node) {
		next = node;
		prev = node->prev;
		if (node->prev) node->prev->next = this;
		node->prev = this;
	}

	void InsertBefore(ListNode *node) {
		next = node->next;
		prev = node;
		if (node->next) node->next->prev = this;
		node->next = this;
	}

	ListNode *NextFromHead() const {
		return prev;
	}

	ListNode *NextFromTail() const {
		return next;
	}
};

class List {
private:
public:
	ListNode head, tail;

	// <--- next             prev --->
	//
	// head <-> node <-> node <-> tail

	List();
	List(int) {}

	void Init() throw();

	void AddHead(ListNode *node) {
		node->InsertAfter(&head);
	}

	void AddTail(ListNode *node) {
		node->InsertBefore(&tail);
	}

	ListNode *RemoveHead() throw();
	ListNode *RemoveTail() throw();

	bool IsEmpty() const throw() {
		return !head.prev->prev;
	}

	ListNode *AtHead() const throw() {
		return head.prev;
	}

	ListNode *AtTail() const throw() {
		return tail.next;
	}

	void Take(List& from) throw();
};

// Templated classes... templated classes good.

template<class T> class List2;

template<class T>
class ListNode2 : public ListNode {
friend List2<T>;
public:
	void InsertBefore(ListNode2<T> *node) { ListNode::InsertBefore(node); }
	void InsertAfter(ListNode2<T> *node) { ListNode::InsertAfter(node); }

	void Remove() { ListNode::Remove(); }
	T *NextFromHead() const { return (T *)ListNode::NextFromHead(); }
	T *NextFromTail() const { return (T *)ListNode::NextFromTail(); }
};

template<class T>
class List2 : public List {
public:
	List2<T>() {}

	// This is a really lame, stupid way to postpone initialization of the
	// list.

	List2<T>(int v) : List(v) {}

	void AddHead(ListNode2<T> *node) { List::AddHead(node); }
	void AddTail(ListNode2<T> *node) { List::AddTail(node); }
	T *RemoveHead() { return (T *)List::RemoveHead(); }
	T *RemoveTail() { return (T *)List::RemoveTail(); }
	T *AtHead() const { return (T *)List::AtHead(); }
	T *AtTail() const { return (T *)List::AtTail(); }

	// I must admit to being pampered by STL (end is different though!!)

	T *begin() const { return AtHead(); }
	T *end() const { return AtTail(); }

	void take(List2<T>& from) { List::take(from); }

	class iterator {
	protected:
		ListNode2<T> *node;
		ListNode2<T> *next;

	public:
		iterator() {}
		iterator(const iterator& src) throw() : node(src.node), next(src.next) {}

		bool operator!() const throw() { return 0 == next; }
		T *operator->() const throw() { return (T *)node; }
		operator bool() const throw() { return 0 != next; }
		T& operator *() const throw() { return *(T *)node; }
	};

	// fwit: forward iterator (SAFE if node disappears)
	// rvit: reverse iterator (SAFE if node disappears)

	class fwit : public iterator {
	public:
		fwit() throw() {}
		fwit(const fwit& src) throw() : iterator(src) {}
		fwit(ListNode2<T> *start) throw() {
			node = start;
			next = start->NextFromHead();
		}

		const fwit& operator=(ListNode2<T> *start) throw() {
			node = start;
			next = start->NextFromHead();

			return *this;
		}

		fwit& operator++() throw() {
			node = next;
			next = node->NextFromHead();

			return *this;
		}

		const fwit& operator+=(int v) throw() {
			while(next && v--) {
				node = next;
				next = node->NextFromHead();
			}

			return *this;
		}

		fwit operator+(int v) const throw() {
			fwit t(*this);

			t += v;

			return t;
		}

		// This one's for my sanity.

		void operator++(int) throw() {
			++*this;
		}
	};

	class rvit : public iterator {
	public:
		rvit() throw() {}

		rvit(ListNode2<T> *start) throw() {
			node = start;
			next = start->NextFromTail();
		}

		const rvit& operator=(ListNode2<T> *start) throw() {
			node = start;
			next = start->NextFromTail();

			return *this;
		}

		rvit& operator--() throw() {
			node = next;
			next = node->NextFromTail();

			return *this;
		}

		const rvit& operator-=(int v) throw() {
			while(next && v--) {
				node = next;
				next = node->NextFromTail();
			}

			return *this;
		}

		rvit operator-(int v) const throw() {
			rvit t(*this);

			t -= v;

			return t;
		}

		// This one's for my sanity.

		void operator--(int) throw() {
			--*this;
		}
	};
};

template<class T>
class ListAlloc : public List2<T> {
public:
	ListAlloc<T>() {}
	~ListAlloc<T>() {
		dispose();
	}

	void dispose() {
		T *node;

		while(node = RemoveHead())
			delete node;
	}
};

#endif

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲综合一二区| av福利精品导航| 成人网在线播放| 欧美伦理视频网站| 国产精品视频一二| 日韩国产精品91| 91亚洲国产成人精品一区二三| 777奇米四色成人影色区| 国产亚洲一二三区| 免费观看91视频大全| 色呦呦国产精品| 中文一区一区三区高中清不卡| 天天色天天操综合| 色狠狠桃花综合| 欧美经典三级视频一区二区三区| 亚洲一区二区高清| 色综合一个色综合亚洲| 国产拍欧美日韩视频二区| 日韩av一区二区在线影视| 欧美亚洲综合一区| 亚洲日本va午夜在线电影| 成人污污视频在线观看| 亚洲天堂免费看| 国产成人欧美日韩在线电影| 日韩三级免费观看| 午夜日韩在线电影| 欧美日韩成人高清| 午夜精品免费在线| 欧美人妇做爰xxxⅹ性高电影| 一区二区三区在线视频播放| 一本高清dvd不卡在线观看| 中文子幕无线码一区tr| 国产69精品久久99不卡| 欧美国产1区2区| 国产69精品久久777的优势| 久久久久亚洲综合| 国产成人免费视频一区| 久久精品亚洲精品国产欧美kt∨| 久热成人在线视频| 久久久久97国产精华液好用吗| 久久国产免费看| 精品国产三级a在线观看| 国模娜娜一区二区三区| 久久久亚洲午夜电影| 成人av资源站| 一区二区三区日本| 欧美一区午夜视频在线观看 | 亚洲一二三四在线| 欧美日韩视频在线第一区| 亚洲bt欧美bt精品777| 欧美一区二区三级| 欧美性感一类影片在线播放| 亚洲一区二区三区视频在线播放| 欧美亚洲精品一区| 久久超碰97人人做人人爱| 久久久99精品久久| 色狠狠一区二区| 蜜臀久久久久久久| 国产女主播一区| 在线观看区一区二| 久久99精品久久久久久国产越南| 国产色产综合产在线视频| 色综合一区二区| 捆绑调教美女网站视频一区| 国产欧美一区二区在线| 欧美午夜一区二区三区免费大片| 日韩avvvv在线播放| 国产欧美一二三区| 欧美日韩三级视频| 亚洲午夜免费视频| 久久综合久久综合久久| 在线观看www91| 激情成人综合网| 一区二区三区免费网站| 欧美精品一区二区三区蜜桃| 91成人免费在线| 国产麻豆精品一区二区| 亚洲影视在线播放| 欧美激情一区三区| 337p亚洲精品色噜噜| 暴力调教一区二区三区| 蜜臀精品一区二区三区在线观看| 国产精品网站一区| 亚洲欧美韩国综合色| 精品国产免费久久| 欧美日韩精品一区二区三区 | 亚洲成人免费在线| 中文字幕乱码日本亚洲一区二区| 91精品啪在线观看国产60岁| 99精品视频在线观看| 国模一区二区三区白浆| 日韩中文字幕亚洲一区二区va在线| 日本一区二区三区视频视频| 欧美一区二区三区在| 在线观看亚洲a| 99re视频精品| 国产91色综合久久免费分享| 奇米在线7777在线精品| 婷婷成人激情在线网| 亚洲欧美激情一区二区| 中文字幕精品—区二区四季| 精品国产成人在线影院| 欧美大胆人体bbbb| 欧美精品vⅰdeose4hd| 色婷婷久久久久swag精品 | 日韩av电影免费观看高清完整版 | 亚洲成av人影院在线观看网| 综合久久给合久久狠狠狠97色 | 在线播放91灌醉迷j高跟美女| 色综合久久66| 91天堂素人约啪| 99久久婷婷国产综合精品 | 国产欧美精品一区二区色综合 | 国产精品久久久久久久久晋中| 国产亚洲综合性久久久影院| 一区二区三区影院| 最新国产成人在线观看| 国产精品传媒入口麻豆| 国产精品成人免费| 成人欧美一区二区三区白人 | 欧美一级国产精品| 欧美一级精品大片| 欧美成人一区二区三区片免费| 91精品国产乱| 欧美电影免费观看高清完整版在线 | 一区二区免费在线| 亚洲最新视频在线播放| 亚洲不卡一区二区三区| 丝瓜av网站精品一区二区| 日本美女视频一区二区| 久久成人麻豆午夜电影| 国内欧美视频一区二区| 国产成人综合网站| 91偷拍与自偷拍精品| 欧美日韩亚洲综合在线 | 欧美精品高清视频| 日韩三级高清在线| 国产午夜精品久久久久久久 | 欧美日韩aaaaaa| 欧美裸体bbwbbwbbw| 精品乱人伦一区二区三区| 久久久久久久久久久99999| 国产精品麻豆99久久久久久| 一区二区三区自拍| 日本不卡一二三| 国产aⅴ综合色| 欧美色综合影院| 欧美精品一区二区久久久| 中文字幕在线不卡国产视频| 亚洲国产一区二区三区青草影视| 麻豆视频观看网址久久| 成人av网址在线观看| 欧美高清视频一二三区| 日本一区二区三区电影| 亚洲午夜视频在线观看| 国产一区二区三区综合| 在线这里只有精品| 久久天堂av综合合色蜜桃网| 樱桃视频在线观看一区| 韩国毛片一区二区三区| 91黄视频在线| 久久久久久久久97黄色工厂| 亚洲国产另类精品专区| 国产成人在线视频网站| 欧美日韩精品欧美日韩精品一 | 免费成人av在线播放| www.欧美日韩国产在线| 日韩精品一区二区三区中文不卡| 亚洲乱码中文字幕| 韩国中文字幕2020精品| 欧美日韩国产美| 亚洲视频一二三| 国产·精品毛片| 欧美成人精品1314www| 一区二区三区四区不卡视频| 国产精品一二三四五| 欧美一区二区视频免费观看| 亚洲精品大片www| 不卡的av电影在线观看| www国产精品av| 久久精品av麻豆的观看方式| 欧美午夜一区二区三区免费大片| 中文字幕日韩精品一区| 国产一区亚洲一区| 欧美精品一区二区三区蜜桃视频| 婷婷激情综合网| 欧美日韩免费电影| 亚洲自拍偷拍av| 一本一道波多野结衣一区二区| 国产精品网站一区| 欧美日韩视频不卡| 一区二区三区日韩精品视频| 99精品久久只有精品| 中文字幕亚洲欧美在线不卡| 国产成人啪免费观看软件| 久久品道一品道久久精品| 久久99精品国产.久久久久久| 欧美精品在线观看播放| 午夜激情综合网| 91精品黄色片免费大全|