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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? timelines.h

?? 彩信瀏覽器
?? H
字號(hào):
/* * This file is part of Ambulant Player, www.ambulantplayer.org. * * Copyright (C) 2003-2007 Stichting CWI,  * Kruislaan 413, 1098 SJ Amsterdam, The Netherlands. * * Ambulant Player is free software; you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation; either version 2.1 of the License, or * (at your option) any later version. * * Ambulant Player 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 Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with Ambulant Player; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA *//*  * @$Id: timelines.h,v 1.12 2007/02/12 14:14:41 jackjansen Exp $  */#ifndef AMBULANT_MMS_TIMELINES_H#define AMBULANT_MMS_TIMELINES_H#include "ambulant/config/config.h"#include <vector>#include <map>#include "ambulant/lib/node.h"#include "ambulant/lib/callback.h"#include "ambulant/lib/refcount.h"#include "ambulant/lib/mtsync.h"#include "ambulant/lib/event_processor.h"#include "ambulant/common/layout.h"#include "ambulant/common/playable.h"#include "ambulant/net/datasource.h"namespace ambulant {namespace mms {// Forward delcarationsclass active_timeline;class timeline_node;class timeline_delay;namespace detail {class dependency_index_generator;class active_ext_action;class active_int_action;class active_preroll_action;class active_startplay_action;class active_stopplay_action;typedef std::vector<timeline_node*> timeline_node_vector;typedef std::vector<timeline_delay*> delay_vector;};// timeline_event_class defines the types of events that can// happen in the timeline scheduler.enum timeline_event_class {	// TIMELINE events are things happening to the timeline as a whole	START_PREROLL_TIMELINE,	START_PLAY_TIMELINE,	DONE_PLAY_TIMELINE,		// internal events: these are side-effect-free events that keep the	// timeline scheduler running	START_PREROLL,	START_PLAY,	STOP_PLAY,	DONE_PLAY,	DELAY,		// external events: these are side-effect-only events that cause external	// things to happen, or the externally-caused event returned from these	START_PREROLL_RENDERER,	START_PLAY_RENDERER,	STOP_PLAY_RENDERER,	DONE_PLAY_RENDERER,	};#ifndef AMBULANT_NO_IOSTREAMSinline std::ostream& operator<<(std::ostream& os, const timeline_event_class n) {	static char *timeline_event_class_names[] = {		"START_PREROLL_TIMELINE",		"START_PLAY_TIMELINE",		"DONE_PLAY_TIMELINE",				"START_PREROLL",		"START_PLAY",		"STOP_PLAY",		"DONE_PLAY",				"DELAY",				"START_PREROLL_RENDERER",		"START_PLAY_RENDERER",		"STOP_PLAY_RENDERER",		"DONE_PLAY_RENDERER",	};	if ((unsigned)n < sizeof(timeline_event_class_names)/sizeof(timeline_event_class_names[0]))		os << timeline_event_class_names[(int)n];	else		os << "UNKNOWN_EVENT[" << (int)n << "]";	return os;}#endif// timeline_delay objects are used by the timeline scheduler to// implement a delay. The object stores the value of the delay (in// milliseconds), but the object identity is also important:// The combination (DELAY, delayobject) is what triggers the// dependent actionsclass timeline_delay {  public:  	timeline_delay(int time)	: m_time(time) {};		inline int timeout() const { return m_time; }#ifndef AMBULANT_NO_IOSTREAMS	friend inline std::ostream& operator<<(std::ostream& os, const timeline_delay& n) {		os << "delay("  << static_cast<const void *>(&n) << ") = " << n.m_time << "ms" << std::endl;		return os;	}#endif  private:  	int m_time;};namespace detail {// active_action objects are used to store the RHS of a timeline_event// for execution by an active_timeline object. The active_action objects// themselves are immutable and owned by the passive_timeline.class active_action {  public:	virtual ~active_action(){}	  	// active_timeline calls this to execute the action  	virtual void fire(active_timeline * const parent) const = 0;  	virtual void delayed_fire(active_timeline * const parent) const = 0;#ifndef AMBULANT_NO_IOSTREAMS  	virtual void to_stream(std::ostream& os) const = 0;#endif};typedef std::vector<detail::active_action*> active_action_vector;#ifndef AMBULANT_NO_IOSTREAMSinline std::ostream& operator<<(std::ostream& os, const detail::active_action& n) {	n.to_stream(os);	return os;}#endif// event_uid is a type that is used in timeline events. It is a unique// identifier of the object to which the timeline event refers.typedef const void *event_uid;// a timeline_event stores a unique event in the schedule of the// timeline. It is similar to an arc in a petrinet.class timeline_event {  public:    timeline_event(timeline_event_class what, detail::event_uid direct_object)    :	m_what(what), m_direct_object(direct_object) {};    timeline_event(timeline_event_class what, const lib::node *direct_object)    :	m_what(what), m_direct_object(static_cast<detail::event_uid>(direct_object)) {};    timeline_event(timeline_event_class what, const timeline_delay *direct_object)    :	m_what(what), m_direct_object(static_cast<detail::event_uid>(direct_object)) {};      	inline bool operator<(const timeline_event& right) const {  		if (m_what < right.m_what)   			return true;  		if (m_what > right.m_what)  			return false;  		if (m_direct_object < right.m_direct_object)  			return true;  		return false;  	}#ifndef AMBULANT_NO_IOSTREAMS	friend inline std::ostream& operator<<(std::ostream& os, const detail::timeline_event& n) {		os << n.m_what << "(" << static_cast<const void *>(n.m_direct_object) << ")";		return os;	}#endif	  protected:	timeline_event_class m_what;	detail::event_uid m_direct_object;};// timeline_rhs_event stores one entry in the RHS of a node transition// list. In addition to storing the information in a timeline_event// it can generate the active_action objects for itselfclass timeline_rhs_event : public timeline_event {  public:    timeline_rhs_event(timeline_event_class what, const lib::node *direct_object)    :	timeline_event(what, direct_object),    	m_node(direct_object),    	m_delay(NULL) {};    timeline_rhs_event(timeline_event_class what, const timeline_delay *direct_object)    :	timeline_event(what, direct_object),    	m_node(NULL),    	m_delay(direct_object) {};	void build_action(detail::active_action_vector& actions,		detail::dependency_index_generator& indexer,		int node_index);  private:  	const lib::node *m_node;  	const timeline_delay *m_delay;};typedef std::vector<detail::timeline_event> timeline_event_vector;typedef std::vector<detail::timeline_rhs_event> timeline_rhs_event_vector;// The dependency index generator is an object used while flattening// the information used during building a passive_timeline to the form// executable by an active_timeline. It converts timeline_event// objects to a unique sequence number.class dependency_index_generator {  public:  	dependency_index_generator()  	:	m_cur_end_pos(0) {}  	  	// Get the next available sequence number, and map all  	// events in the given event vector to this sequence number.  	int set_index(timeline_event_vector &ev);  	  	// Get the sequence number for a given event.  	int get_index(timeline_event &ev);  private:  	std::map<timeline_event, int> m_index;  	int m_cur_end_pos;};// Class to store the argument to a timeline dependency callbacktypedef int dependency_callback_arg;// active_dependency is the representation of the LHS of a single// timeline node transition in an active_timeline object. A vector// of these (indexed by the dependency index) is stored by the active_timeline.// When a dependency callback comes in the dependency count is decremented// and when it reaches zero the corresponding actions are fired.// This is a mutable object, and each active_timeline object has a private// copy.class active_dependency {  public:  	active_dependency(int count, int first, int last)  	:	m_depcount(count),  		m_first(first),  		m_last(last) {}#ifndef AMBULANT_NO_IOSTREAMS	friend inline std::ostream& operator<<(std::ostream& os, const detail::active_dependency& n) {		os << "active_dependency(count=" << n.m_depcount << 			", first=" << n.m_first <<			", last=" << n.m_last << ")";		return os;	}#endif  			int	m_depcount;	int m_first;	int m_last;};typedef std::vector<detail::active_dependency> active_dependency_vector;} //namespace detail// timeline_node_transition helps building a state transition for// node playback. Create it, then add preconditions and events firedclass timeline_node_transition {  public:  	// XXXX Note: I think node and region need to be refcounted.	timeline_node_transition() {};		// Methods for building the transitions	void add_lhs(timeline_event_class what);	void add_lhs(timeline_event_class what, const lib::node *direct_object);	void add_lhs(timeline_event_class what, const timeline_delay *direct_object);		void add_rhs(timeline_event_class what);	void add_rhs(timeline_event_class what, const lib::node *direct_object);	void add_rhs(timeline_event_class what, const timeline_delay *direct_object);	void build_index(detail::dependency_index_generator& indexer);	void build_actions(detail::active_action_vector& actions,			detail::dependency_index_generator& indexer,			int node_index);	void build_dependencies(detail::active_dependency_vector& dependencies);#ifndef AMBULANT_NO_IOSTREAMS		void dump(std::ostream& os);#endif  private:	detail::timeline_event_vector m_lhs;  	detail::timeline_rhs_event_vector m_rhs;  	int m_action_begin, m_action_end;  	int m_event_index;};#ifndef AMBULANT_NO_IOSTREAMS	inline std::ostream& operator<<(std::ostream& os, const timeline_node_transition& n) {	os << "timeline_node_transition(" << (const void *)&n << ")";	return os;}#endif// timeline_node stores all information about a node that the passive_timeline// is interested in: the node point, the region it plays to and the list// of timeline transitions for it.class timeline_node {  public:  	friend class active_timeline;  	// XXXX Note: I think node, datasource and region need to be refcounted.	timeline_node(const lib::node *the_node)	:	m_node(the_node) {};	timeline_node_transition *add_transition();		void build_index(detail::dependency_index_generator& indexer);	void build_actions(detail::active_action_vector& actions,			detail::dependency_index_generator& indexer,			int node_index);	void build_dependencies(detail::active_dependency_vector& dependencies);	int get_playdone_index(detail::dependency_index_generator& indexer, int node_index);	#ifndef AMBULANT_NO_IOSTREAMS		void dump(std::ostream& os, int &num);	void dump(std::ostream& os);#endif  private:  	const lib::node *m_node;  	std::vector<timeline_node_transition*> m_transitions;};#ifndef AMBULANT_NO_IOSTREAMS	inline std::ostream& operator<<(std::ostream& os, const timeline_node& n) {	os << "timeline_node(" << (const void *)&n << ")";	return os;}#endif// Passive_timeline is the object used to build and store a schedule// for a timeline. Create the passive_timeline, add nodes, add delays,// and add timeline transitions to the nodes. Then call build() to// convert all datastructures from the building form to the executable// form. At this point the object becomes immutable, and you can activate()// it to create a new runnable active_timeline. class passive_timeline : public lib::ref_counted_obj {  public:  	friend class active_timeline;  	  	// Methods for initialization and teardown	passive_timeline(lib::node *rootnode);	~passive_timeline();	// Methods used while building the passive timeline	timeline_node *add_node(const lib::node *the_node);	timeline_delay *add_delay(int timeout);		void build();	inline bool is_built() { return m_is_built; }		active_timeline *activate(lib::event_processor *const evp, common::playable_factory *rf, common::layout_manager *lm);#ifndef AMBULANT_NO_IOSTREAMS		void dump(std::ostream& os);#endif	  private:  	lib::node *m_rootnode;    bool m_is_built;    detail::timeline_node_vector m_timeline_nodes;    detail::delay_vector m_delays;	detail::active_dependency_vector m_dependencies;	detail::active_action_vector m_actions;	int *m_playdone_indices;};#ifndef AMBULANT_NO_IOSTREAMS	inline std::ostream& operator<<(std::ostream& os, const passive_timeline& n) {	os << "passive_timeline(" << (const void *)&n << ")";	return os;}#endif// Active_timeline is a runnable timeline scheduler. It shares// all of its immutable data with the corresponding passive_timeline,// so creating an active_timeline should be relatively cheap.class active_timeline : public common::playable_notification, public lib::ref_counted_obj {  public:	friend class detail::active_ext_action;	friend class detail::active_int_action;	friend class detail::active_preroll_action;	friend class detail::active_startplay_action;	friend class detail::active_stopplay_action;  		active_timeline(lib::event_processor *const evp,		passive_timeline *const source, 		const detail::active_dependency_vector& dependencies,		const detail::active_action_vector& actions,		int nregion,		common::playable_factory *rf,		common::layout_manager *lm);		~active_timeline() {		m_source->release();	}		void preroll();	void start(lib::event *playdone);	void stop();	void pause();	void resume();	#ifndef AMBULANT_NO_IOSTREAMS		void dump(std::ostream& os);#endif	// playable_notification interface:	void started(int n, double t);	void stopped(int n, double t);	void clicked(int n, double t);	void pointed(int n, double t) {}	virtual void stalled(int n, double t = 0) {}	virtual void unstalled(int n, double t = 0) {}	virtual void transitioned(int n, double t = 0) {}	  protected:  	// These are protected because they are only meant for use  	// by the various active_action objects  	void dependency_callback(detail::dependency_callback_arg arg);  	void ext_dependency_callback(detail::dependency_callback_arg arg);  	void ext_preroll(int node_index);  	void ext_play(int node_index);  	void ext_stop(int node_index);  	  	lib::event_processor * const m_event_processor;  	common::playable_factory *m_playable_factory;    passive_timeline * const m_source;	common::layout_manager *m_layout_manager;	detail::active_dependency_vector m_dependencies;	const detail::active_action_vector& m_actions;	std::vector<common::playable *> m_playables;	lib::event *m_playdone;};#ifndef AMBULANT_NO_IOSTREAMSinline std::ostream& operator<<(std::ostream& os, const active_timeline& n) {	os << "active_timeline(" << (const void *)&n << ")";	return os;}#endif} // namespace mms } // namespace ambulant#endif // AMBULANT_MMS_TIMELINES_H

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美激情综合在线| 亚洲一区二区三区在线| 色婷婷亚洲婷婷| 久久99蜜桃精品| 中文字幕成人av| 日韩欧美国产综合在线一区二区三区| 成人免费高清视频在线观看| 日本午夜精品视频在线观看 | 蜜芽一区二区三区| 亚洲特黄一级片| 精品卡一卡二卡三卡四在线| 91久久国产最好的精华液| 国产精品一卡二卡在线观看| 日韩av不卡在线观看| 亚洲女人****多毛耸耸8| 国产视频不卡一区| 日韩免费视频一区| 欧美日韩在线一区二区| 92精品国产成人观看免费| 国产另类ts人妖一区二区| 蜜桃一区二区三区在线| 亚洲国产精品麻豆| 亚洲精品国久久99热| 日本一二三四高清不卡| 精品国产sm最大网站| 欧美日韩黄视频| 欧美性做爰猛烈叫床潮| 91在线播放网址| 福利电影一区二区| 韩国精品在线观看| 日韩精品一级中文字幕精品视频免费观看 | 欧美视频一二三区| 色94色欧美sute亚洲线路一ni| 国产成人自拍高清视频在线免费播放| 美腿丝袜亚洲一区| 免费av网站大全久久| 肉肉av福利一精品导航| 午夜精品福利一区二区蜜股av| 一区二区三区在线观看网站| 曰韩精品一区二区| 一区二区三区日韩精品视频| 一个色综合av| 亚洲午夜成aⅴ人片| 亚洲综合男人的天堂| 一区二区三区丝袜| 一区二区三区在线观看网站| 亚洲制服丝袜av| 亚洲成人tv网| 日本欧美久久久久免费播放网| 日韩和欧美一区二区| 人人爽香蕉精品| 极品少妇一区二区三区精品视频 | 琪琪久久久久日韩精品| 午夜精品在线看| 免费成人美女在线观看.| 玖玖九九国产精品| 国产精品1区二区.| av电影在线不卡| 91麻豆成人久久精品二区三区| 色呦呦国产精品| 欧美日韩亚洲综合| 日韩一区二区在线免费观看| 欧美mv日韩mv| 国产精品家庭影院| 一区二区三区日本| 麻豆91免费观看| 国产一区不卡在线| 97成人超碰视| 91麻豆精品久久久久蜜臀| 久久综合九色综合97婷婷女人 | 一区二区三区影院| 爽好多水快深点欧美视频| 久久国产日韩欧美精品| 播五月开心婷婷综合| 在线观看视频91| 精品久久久久久亚洲综合网| 国产精品每日更新| 日韩电影一区二区三区| 国产一区二区三区视频在线播放| 99精品在线观看视频| 91精品综合久久久久久| 国产女主播视频一区二区| 一区二区三区在线视频免费| 激情av综合网| 91久久精品午夜一区二区| 精品国产乱码久久久久久蜜臀 | 国产成人午夜电影网| 国产精品视频你懂的| 亚洲国产中文字幕在线视频综合| 国产一区三区三区| 欧美在线|欧美| 日本一区二区三区四区| 性做久久久久久| 国产91丝袜在线18| 91精品在线观看入口| 中文字幕在线观看不卡| 久久99久久99小草精品免视看| 99国产精品视频免费观看| 欧美一区二区三区四区高清| 亚洲人快播电影网| 国产在线观看一区二区| 在线免费观看一区| 亚洲国产精品av| 久久99久久精品欧美| 欧美日韩一区在线| 亚洲欧洲成人av每日更新| 国产麻豆一精品一av一免费| 欧美群妇大交群中文字幕| 亚洲欧洲另类国产综合| 国产一区二区女| 日韩美女天天操| 日日摸夜夜添夜夜添精品视频 | 亚洲三级在线免费观看| 国产麻豆精品一区二区| 日韩三级在线观看| 亚洲国产wwwccc36天堂| 色偷偷成人一区二区三区91| 中文字幕巨乱亚洲| 激情五月婷婷综合网| 538prom精品视频线放| 亚洲一二三专区| 91在线观看污| 国产精品久久久久影院色老大 | 在线观看91视频| 国产精品福利影院| 成人亚洲一区二区一| 国产婷婷色一区二区三区四区 | 欧美专区亚洲专区| 亚洲欧美另类图片小说| 91在线视频在线| 中文字幕视频一区| www.亚洲在线| 中文字幕在线不卡一区| 成人美女视频在线观看| 国产精品理伦片| 国产91高潮流白浆在线麻豆 | 久久综合九色综合97婷婷女人| 久久精品av麻豆的观看方式| 日韩欧美不卡一区| 国产一区日韩二区欧美三区| 久久久久9999亚洲精品| 成人美女视频在线观看18| 中文字幕中文乱码欧美一区二区| 国产ts人妖一区二区| 中文幕一区二区三区久久蜜桃| 成人综合激情网| 亚洲人成网站色在线观看| 色悠悠久久综合| 亚洲国产色一区| 欧美一区二区视频在线观看2020| 日本怡春院一区二区| 欧美成人福利视频| 国产成a人亚洲精品| 中文字幕日韩av资源站| 欧美中文字幕一二三区视频| 亚洲电影一级黄| 日韩一区二区三区视频| 国产美女视频91| 亚洲欧美日韩综合aⅴ视频| 欧美日韩一区二区三区不卡| 日韩不卡一区二区三区| 国产午夜精品一区二区| 色婷婷综合久久久久中文| 日本vs亚洲vs韩国一区三区二区| 精品粉嫩aⅴ一区二区三区四区| 国产精品一线二线三线精华| 亚洲私人黄色宅男| 欧美高清视频不卡网| 国产真实乱对白精彩久久| 136国产福利精品导航| 欧美色成人综合| 国产一区二区三区在线观看免费| 中文字幕精品一区| 欧美福利电影网| 粉嫩嫩av羞羞动漫久久久 | 调教+趴+乳夹+国产+精品| 亚洲精品一区二区三区99| 99精品欧美一区二区三区小说| 亚州成人在线电影| 国产精品色在线| 91麻豆精品久久久久蜜臀| 成人黄色av网站在线| 日韩高清在线一区| 国产精品成人在线观看| 欧美精品一二三| 成人动漫视频在线| 青青草国产成人av片免费 | 蜜桃av一区二区三区| 亚洲蜜臀av乱码久久精品| 欧美mv日韩mv国产网站app| 色域天天综合网| 国产福利91精品一区二区三区| 亚洲不卡一区二区三区| 国产精品私人自拍| 91精品国产免费久久综合| 99综合影院在线| 激情国产一区二区| 日韩精品欧美精品| 一区二区三区日韩精品| 国产精品久久久久影院|