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

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

?? git.cpp

?? firtext搜索引擎源碼
?? CPP
字號(hào):
#include "com/Com.h"
#include "com/comerror.h"
#include <assert.h>
#include <pthread.h>
#include <stdlib.h>
#include "com/linux/git.h"
#include "com/linux/internal.h"

struct StdGITEntry
{
	uint32_t		cookie;
	firtex::com::FX_IID		iid;	// FX_IID of the interface
	firtex::com::IStream*	stream;	// Holds the marshalled interface */

	struct StdGITEntry* next;
	struct StdGITEntry* prev;  
};

namespace firtex
{
	namespace com 
	{
		namespace git 
		{
			FX_CLSID clsid = { 0x00000323, 0, 0, {0xc0, 0, 0, 0, 0, 0, 0, 0x46} };

			class StdGlobalInterfaceTableImpl : public IGlobalInterfaceTable
			{
			public:
				StdGlobalInterfaceTableImpl()
				{ 
					ref = 1; 
					firstEntry=0; 
					lastEntry=0; 
					nextCookie=0xf100; // that's where windows starts, so that's where we start
				};

				FX_STDMETHOD(QueryInterface)(FX_REFIID riid, void ** ppvObject );
				uint32_t   AddRef();
				uint32_t   Release();
				FX_STDMETHOD(RegisterInterfaceInGlobal)( 
					/* [in] */ IUnknown __RPC_FAR *pUnk,
					/* [in] */ FX_REFIID riid,
					/* [out] */ uint32_t __RPC_FAR *pdwCookie);
					FX_STDMETHOD(RevokeInterfaceFromGlobal)(uint32_t dwCookie);
				FX_STDMETHOD(GetInterfaceFromGlobal)(
					/* [in] */ uint32_t dwCookie,
					/* [in] */ FX_REFIID riid,
					/* [iid_is][out] */ void __RPC_FAR *__RPC_FAR *ppv);

					StdGITEntry* FindEntry( uint32_t cookie );

			private:
				uint32_t		ref;
				StdGITEntry*	firstEntry;
				StdGITEntry*	lastEntry;
				uint32_t		nextCookie; 
			};

			class ClassFactory : public IClassFactory
			{
			public:
				FX_STDMETHOD(QueryInterface)( FX_IID const& riid, void** ptr );
				uint32_t   AddRef();
				uint32_t   Release();
				FX_STDMETHOD(LockServer)(int32_t fLock);
				FX_STDMETHOD(CreateInstance)( IUnknown* pUnkOuter, FX_REFIID riid, void** ppvObject );
			};

		};
	};
};

static firtex::com::git::StdGlobalInterfaceTableImpl* instance = 0;
static pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;


StdGITEntry* firtex::com::git::StdGlobalInterfaceTableImpl::FindEntry(uint32_t cookie) 
{
	StdGITEntry* e;

	internal::pthread_mutex_lock lock(&mutex);

	e = firstEntry;
	while ( e ) {
		if (e->cookie == cookie) return e;
		e = e->next;
	}
  
  
	assert( !e );
	return 0;
}

firtex::com::FX_HRESULT firtex::com::git::StdGlobalInterfaceTableImpl::QueryInterface(FX_REFIID riid, void** ppvObject) 
{
	/* Make sure silly coders can't crash us */
	if (ppvObject == 0) return FX_E_INVALIDARG;

	*ppvObject = 0; /* assume we don't have the interface */

	/* Do we implement that interface? */
	if (FX_IsEqualIID( IUnknown::iid, riid) ) {
		*ppvObject = static_cast<firtex::com::IUnknown*>(this);
	} 
	else if ( FX_IsEqualIID( IGlobalInterfaceTable::iid, riid)) {
		*ppvObject = static_cast<firtex::com::IGlobalInterfaceTable*>(this);
	} 
	else return FX_E_NOINTERFACE;

	/* Now inc the refcount */
	AddRef();
	return FX_S_OK;
}

uint32_t firtex::com::git::StdGlobalInterfaceTableImpl::AddRef() 
{
  /* InterlockedIncrement(&self->ref); */
  return ref;
}

uint32_t  firtex::com::git::StdGlobalInterfaceTableImpl::Release() 
{
  /* InterlockedDecrement(&self->ref); */
  if (ref == 0) {
    /* Hey ho, it's time to go, so long again 'till next weeks show! */
    delete this;
    return 0;
  }

  return ref;
}

firtex::com::FX_HRESULT firtex::com::git::StdGlobalInterfaceTableImpl::RegisterInterfaceInGlobal(
	IUnknown* pUnk, FX_REFIID riid, uint32_t * pdwCookie) 
{

	if (pUnk == NULL) return FX_E_INVALIDARG;

	
	// marshal the interface
	IStream* stream = NULL;
	FX_HRESULT hr = FX_CoMarshalInterThreadInterfaceInStream(riid, pUnk, &stream);
	if ( FX_FAILED(hr) ) return hr;
	assert( stream );

	StdGITEntry* entry = reinterpret_cast<StdGITEntry*>( malloc( sizeof(StdGITEntry) ) );
	if ( !entry ) return FX_E_OUTOFMEMORY;

	internal::pthread_mutex_lock lock( &mutex );
  
	entry->iid = riid;
	entry->stream = stream;
	entry->cookie = nextCookie;
	++nextCookie; // inc the cookie count

	// insert the new entry at the end of the list
	entry->next = NULL;
	entry->prev = lastEntry;
	if (entry->prev) 
		entry->prev->next = entry;
	else 
		firstEntry = entry;
	lastEntry = entry;

	// and return the cookie
	*pdwCookie = entry->cookie;
  
	return FX_S_OK;
}

firtex::com::FX_HRESULT firtex::com::git::StdGlobalInterfaceTableImpl::RevokeInterfaceFromGlobal( uint32_t dwCookie) 
{
	StdGITEntry* entry = FindEntry(dwCookie);
	if ( !entry ) return FX_E_INVALIDARG; /* not found */
  
	// Free the stream
	entry->stream->Release();
		    
	/* chop entry out of the list, and free the memory */
	internal::pthread_mutex_lock lock( &mutex );
	if (entry->prev) 
	  entry->prev->next = entry->next;
	else 
	  firstEntry = entry->next;
	if (entry->next) 
	  entry->next->prev = entry->prev;
	else 
		lastEntry = entry->prev;


	free( entry );
	return FX_S_OK;
}

firtex::com::FX_HRESULT firtex::com::git::StdGlobalInterfaceTableImpl::GetInterfaceFromGlobal(uint32_t dwCookie, FX_REFIID riid, void **ppv) 
{
	StdGITEntry* entry = FindEntry( dwCookie );
 	if ( !entry ) return FX_E_INVALIDARG;
  
	if ( !FX_IsEqualIID( entry->iid, riid) ) {
 		//WARN("entry->iid (%s) != riid\n", debugstr_guid(&entry->iid));
		return FX_E_INVALIDARG;
	}
  
	// unmarshal the interface
	FX_HRESULT hr = FX_CoUnmarshalInterface( entry->stream, riid, ppv );
	if ( FX_FAILED(hr) ) {
		//WARN("Failed to unmarshal stream\n");
		return hr;
	}
  
	// rewind stream, in case it's used again
	entry->stream->Seek( 0, IStream::STREAM_SEEK_SET, NULL );

	// addref it
	IUnknown* lpUnk = reinterpret_cast<IUnknown*>( *ppv );
	lpUnk->AddRef();
	return FX_S_OK;
}

/* Classfactory definition - despite what MSDN says, some programs need this */

firtex::com::FX_HRESULT firtex::com::git::ClassFactory::QueryInterface(FX_REFIID riid, void** ppv) 
{
	if ( !ppv ) return FX_E_INVALIDARG;
	*ppv = NULL;
	if ( FX_IsEqualIID(riid,IUnknown::iid) )
		*ppv = (IUnknown*)this;
	else if ( FX_IsEqualIID(riid,IGlobalInterfaceTable::iid) ) 
		*ppv = (IGlobalInterfaceTable*)this;
	else
		return FX_E_NOINTERFACE;

    return FX_S_OK;
}

uint32_t firtex::com::git::ClassFactory::AddRef() { return 2; }

uint32_t firtex::com::git::ClassFactory::Release() { return 1; }

firtex::com::FX_HRESULT firtex::com::git::ClassFactory::CreateInstance(firtex::com::IUnknown* pUnk, firtex::com::FX_REFIID riid, void** ppv) 
{
	if ( FX_IsEqualIID( riid,IGlobalInterfaceTable::iid ) ) {
		assert( instance );
		return instance->QueryInterface( riid, ppv );
	}

	return FX_E_NOINTERFACE;
}

firtex::com::FX_HRESULT firtex::com::git::ClassFactory::LockServer(int32_t fLock) 
{
	internal::log_printf( internal::ERROR, "(%d) - FIXME firtex::com::git::ClassFactory::LockServer\n", fLock);
	return FX_S_OK;
}

firtex::com::FX_HRESULT GetFactory(void** ppv) 
{
	static firtex::com::git::ClassFactory factory;

	*ppv = &factory;
	return FX_S_OK;
}

firtex::com::FX_HRESULT firtex::com::git::Initialize()
{
	assert( !instance );
	
	try {
		instance = new firtex::com::git::StdGlobalInterfaceTableImpl();
	}
	catch (...) {
		return FX_E_OUTOFMEMORY;
	}

	return FX_S_OK;
}

void firtex::com::git::Uninitialize()
{
	delete instance;
	instance = 0;
}

firtex::com::FX_HRESULT firtex::com::git::QueryInterface( FX_REFIID iid, void** ppv )
{
	assert( instance );
	return instance->QueryInterface( iid, ppv );
}


?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
成人午夜精品在线| 国产福利一区二区三区在线视频| 欧美www视频| 99久久久无码国产精品| 日本在线不卡视频| 日韩理论片中文av| 久久久另类综合| 欧美一区二区三区色| 91浏览器打开| 国产成人av一区二区| 午夜电影久久久| 亚洲欧美一区二区三区国产精品 | 91视频国产观看| 韩国精品在线观看| 免费观看30秒视频久久| 一区二区国产盗摄色噜噜| 国产日韩综合av| 日韩精品一区二区三区蜜臀| 欧美亚洲一区二区在线观看| 成人午夜激情视频| 国产剧情在线观看一区二区| 免费观看成人av| 日韩高清不卡一区二区三区| 亚洲主播在线播放| 中文字幕一区日韩精品欧美| 国产日韩欧美高清在线| 欧美精品一区二区三区久久久| 欧美美女bb生活片| 欧美少妇性性性| 色婷婷激情一区二区三区| 99亚偷拍自图区亚洲| 成人亚洲一区二区一| 国产精品91xxx| 国产成都精品91一区二区三| 懂色av一区二区在线播放| 国产成人精品网址| 懂色av一区二区三区免费看| 成人妖精视频yjsp地址| 成人黄页在线观看| 99久久伊人精品| 91美女在线观看| 在线看不卡av| 9191国产精品| 欧美成人三级在线| 久久精品在线免费观看| 国产欧美精品一区| 欧美国产一区视频在线观看| 中文字幕欧美一区| 一区二区三区在线视频免费观看 | 天堂成人免费av电影一区| 亚洲国产精品尤物yw在线观看| 亚洲成人资源在线| 久久99久久久欧美国产| 国产做a爰片久久毛片| 国产成人夜色高潮福利影视| 国产99一区视频免费| 99久久国产免费看| 欧美日韩亚洲高清一区二区| 777xxx欧美| 久久久久久日产精品| 国产精品丝袜久久久久久app| 亚洲欧洲日韩女同| 午夜不卡av在线| 国模娜娜一区二区三区| 99国内精品久久| 911精品产国品一二三产区| 精品免费日韩av| 国产精品情趣视频| 亚洲国产成人av| 国产一区二区三区在线看麻豆| voyeur盗摄精品| 欧美日韩国产综合草草| 亚洲精品一线二线三线无人区| 国产精品毛片高清在线完整版| 伊人一区二区三区| 久久91精品久久久久久秒播| 成人少妇影院yyyy| 欧美老年两性高潮| 国产日韩欧美电影| 曰韩精品一区二区| 精品在线观看视频| 色88888久久久久久影院按摩| 欧美一区日韩一区| 中文字幕一区二区三| 日韩中文字幕区一区有砖一区| 国产精品一二三四区| 欧美视频第二页| 欧美激情一区二区三区在线| 亚洲mv在线观看| 成人成人成人在线视频| 欧美另类z0zxhd电影| 中文字幕二三区不卡| 日韩不卡免费视频| 99国产精品久久久久| 精品日韩欧美在线| 婷婷中文字幕综合| 99精品久久99久久久久| 2020国产成人综合网| 五月天欧美精品| 91丝袜呻吟高潮美腿白嫩在线观看| 欧美一区二区三区在线观看| 亚洲免费观看视频| 国产麻豆精品视频| 欧美一级淫片007| 亚洲一级不卡视频| 99视频一区二区三区| 久久久久久亚洲综合影院红桃| 石原莉奈一区二区三区在线观看| 色综合久久天天综合网| 欧美激情在线观看视频免费| 精品一区二区三区不卡| 91精品在线免费| 亚洲国产精品综合小说图片区| 99国产欧美久久久精品| 国产精品毛片无遮挡高清| 国产老女人精品毛片久久| 日韩欧美国产综合| 视频一区欧美精品| 欧美日韩国产美| 亚洲在线视频网站| 色婷婷精品大视频在线蜜桃视频| 国产精品免费视频观看| 国产精选一区二区三区| 精品日本一线二线三线不卡| 婷婷开心久久网| 欧美高清视频在线高清观看mv色露露十八 | 久久国产人妖系列| 欧美一个色资源| 日韩av电影天堂| 337p亚洲精品色噜噜噜| 午夜成人在线视频| 欧美高清dvd| 日韩av电影天堂| 日韩欧美美女一区二区三区| 日韩和欧美一区二区| 欧美一区二区三区免费视频| 蜜臀久久99精品久久久久久9| 欧美肥胖老妇做爰| 日本不卡一区二区三区| 欧美成人猛片aaaaaaa| 久久精品国产成人一区二区三区 | 韩国成人精品a∨在线观看| 日韩精品一区二区三区三区免费 | 欧美日韩中文国产| 天天爽夜夜爽夜夜爽精品视频| 欧美乱妇15p| 裸体一区二区三区| 久久久久久久久久久久久女国产乱 | 国产成都精品91一区二区三| 欧美激情中文字幕| 色婷婷综合久久久中文字幕| 亚洲综合色婷婷| 欧美一区在线视频| 国产一区二区在线看| 国产精品初高中害羞小美女文| 99r国产精品| 日本怡春院一区二区| 久久久久一区二区三区四区| 99精品视频在线免费观看| 亚洲一区二区三区在线| 91精品国产一区二区| 国产精品综合一区二区三区| 国产精品伦一区| 欧美日韩精品一区二区三区四区| 毛片一区二区三区| 国产精品免费观看视频| 在线视频一区二区三区| 奇米色777欧美一区二区| 日本一区二区在线不卡| 在线观看免费亚洲| 经典三级视频一区| 国产精品久久久久影视| 欧美三级视频在线观看| 久久91精品国产91久久小草| 综合久久一区二区三区| 欧美精品一卡二卡| 国产91色综合久久免费分享| 亚洲第一激情av| 国产三级欧美三级日产三级99| 色综合咪咪久久| 国产中文一区二区三区| 一级中文字幕一区二区| 精品裸体舞一区二区三区| 91在线视频免费91| 美美哒免费高清在线观看视频一区二区 | 99精品久久久久久| 免费成人深夜小野草| 亚洲欧美一区二区三区国产精品 | 欧美精品久久久久久久久老牛影院 | 日韩专区中文字幕一区二区| 国产午夜一区二区三区| 91麻豆精品国产91久久久 | 国产精品一区二区在线播放| 亚洲人成小说网站色在线| 日韩精品一区二区三区在线播放| 色婷婷亚洲婷婷| 丁香啪啪综合成人亚洲小说| 奇米精品一区二区三区在线观看 | 国产欧美日韩中文久久| 欧美高清一级片在线|