Ejemplo n.º 1
0
function plotMonth(var value,int type)
{
	int periods = 22;
	LookBack = max(LookBack,periods);
	int n = (periods*tdm())/max(periods,tom());
	//int n = (periods*day())/max(periods,dom());
	if(n > periods) return;
	plotSeason(n,n,month(),value,type);
}
Ejemplo n.º 2
0
//指定されたディレクトリ内部を展開する;高速実装
bool CArchiver7ZIP::ExtractDirectoryEntry(LPCTSTR lpszArcFile,CConfigManager &ConfMan,const ARCHIVE_ENTRY_INFO_TREE* lpBase,const ARCHIVE_ENTRY_INFO_TREE* lpDir,LPCTSTR lpszOutputBaseDir,bool bCollapseDir,CString &strLog)
{
	//---一時フォルダ中にまとめて展開し、後からフォルダ構造を切り出す
	std::list<CString> files;

	CString strPath;

	bool bRestoreDir=false;
	if(lpDir->strFullPath.IsEmpty()){
		//ディレクトリが登録されていないのでパス名を算出する
		ArcEntryInfoTree_GetNodePathRelative(lpDir,lpBase,strPath);
		strPath.Replace(_T('/'),_T('\\'));

		CPath tmpPath(strPath);
		tmpPath.RemoveBackslash();	//ディレクトリだったら裸にする
		tmpPath.RemoveFileSpec();	//親ディレクトリまで切りつめる
		tmpPath.Append(_T("*"));	//特定ディレクトリ以下の全てのファイルを展開
		files.push_back(tmpPath);

		bRestoreDir=true;
	}else{
		//ディレクトリもアーカイブ中にエントリとして登録されているなら出力する
		CString tmpPath(lpDir->strFullPath);
		if(tmpPath[tmpPath.GetLength()-1]==_T('\\')||tmpPath[tmpPath.GetLength()-1]==_T('/')){
			//末尾の\もしくは/を削除
			tmpPath.Delete(tmpPath.GetLength()-1);
		}
		files.push_back(tmpPath);

		strPath=lpDir->strFullPath;
		strPath.Replace(_T('/'),_T('\\'));
	}

	//--------------------------------------
	// 修正された出力ディレクトリパスを算出
	//--------------------------------------
	//---本来の出力先
	CString strOutputDir=lpszOutputBaseDir+strPath;
	if(strOutputDir.GetLength()>_MAX_PATH){
		//フォルダ名が長くなりすぎた
		strLog=CString(MAKEINTRESOURCE(IDS_ERROR_MAX_PATH));
		return false;
	}

	//FileListには1件しか入っていないはず
	ASSERT(files.size()==1);

	//一時フォルダ
	CTemporaryDirectoryManager tdm(_T("lhaf"));
	CPath strTempOutput(tdm.GetDirPath());
	if(bRestoreDir){	//ディレクトリを手作業で復元
		strTempOutput+=strPath;
		strTempOutput.AddBackslash();
		TRACE(_T("手作業でのディレクトリ復元:%s\n"),(LPCTSTR)strTempOutput);
		if(!UtilMakeSureDirectoryPathExists(strTempOutput)){
			strLog.Format(IDS_ERROR_CANNOT_MAKE_DIR,strTempOutput);
			return false;
		}
	}
	//---一時フォルダ中にまとめて展開し、後からフォルダ構造を切り出す
	// ファイルを展開
	if(!ExtractSpecifiedOnly(lpszArcFile,ConfMan,strTempOutput,files,strLog,true)){
		return false;
	}

	//送り側ファイル名指定
	CPath tmp(strTempOutput);
	tmp+=(LPCTSTR)strPath;	//PathAppend相当
	tmp.RemoveBackslash();
	CString strSrcFiles(tmp);
	strSrcFiles+=_T("||");
	//受け側ファイル名指定
	tmp=lpszOutputBaseDir;
	{
		CString strTmp;
		ArcEntryInfoTree_GetNodePathRelative(lpDir,lpBase,strTmp);
		strTmp.Replace(_T('/'),_T('\\'));
		tmp+=(LPCTSTR)strTmp;
	}
	tmp.AddBackslash();
	CString strDestFiles(tmp);
	strDestFiles+=_T("||");

	//'|'を'\0'に変換する
	std::vector<TCHAR> srcBuf(strSrcFiles.GetLength()+1);
	UtilMakeFilterString(strSrcFiles,&srcBuf[0],srcBuf.size());
	std::vector<TCHAR> destBuf(strDestFiles.GetLength()+1);
	UtilMakeFilterString(strDestFiles,&destBuf[0],destBuf.size());

	//ファイル操作内容
	SHFILEOPSTRUCT fileOp={0};
	fileOp.wFunc=FO_MOVE;
	fileOp.fFlags=FOF_MULTIDESTFILES|/*FOF_NOCONFIRMATION|*/FOF_NOCONFIRMMKDIR|FOF_NOCOPYSECURITYATTRIBS|FOF_NO_CONNECTED_ELEMENTS;
	fileOp.pFrom=&srcBuf[0];
	fileOp.pTo=&destBuf[0];

	//移動実行
	if(::SHFileOperation(&fileOp)){
		//エラー
		strLog=CString(MAKEINTRESOURCE(IDS_ERROR_FILE_MOVE));
		return false;
	}else if(fileOp.fAnyOperationsAborted){
		//キャンセル
		strLog=CString(MAKEINTRESOURCE(IDS_ERROR_USERCANCEL));
		return false;
	}

	return true;

}
Ejemplo n.º 3
0
bool CArchiver7ZIP::AddItemToArchive(LPCTSTR ArcFileName,const std::list<CString> &FileList,CConfigManager &ConfMan,LPCTSTR lpDestDir,CString &strLog)
{
	// レスポンスファイル用テンポラリファイル名取得
	TCHAR ResponceFileName[_MAX_PATH+1];
	FILL_ZERO(ResponceFileName);
	if(!UtilGetTemporaryFileName(ResponceFileName,_T("zip"))){
		strLog=CString(MAKEINTRESOURCE(IDS_ERROR_TEMPORARY_FILE_CREATE));
		return false;
	}
	ASSERT(0!=_tcslen(ResponceFileName));

	//===一時的にファイルをコピー
	//---\で終わる基点パスを取得
	CPath strBasePath;
	UtilGetBaseDirectory(strBasePath,FileList);
	TRACE(_T("%s\n"),strBasePath);

	//---テンポラリに対象ファイルをコピー
	//テンポラリ準備
	CTemporaryDirectoryManager tdm(_T("lhaf"));
	CPath strDestPath(tdm.GetDirPath());
	strDestPath+=lpDestDir;
	UtilMakeSureDirectoryPathExists(strDestPath);

	// 圧縮対象ファイル名を修正する
	const int BasePathLength=((CString)strBasePath).GetLength();
	CString strSrcFiles;	//コピー元ファイルの一覧
	CString strDestFiles;	//コピー先ファイルの一覧
	std::list<CString>::const_iterator ite;
	for(ite=FileList.begin();ite!=FileList.end();++ite){
		//ベースパスを元に相対パス取得 : 共通である基底パスの文字数分だけカットする
		LPCTSTR lpSrc((LPCTSTR)(*ite)+BasePathLength);

		//送り側ファイル名指定
		strSrcFiles+=(strBasePath+lpSrc);	//PathAppend相当
		strSrcFiles+=_T('|');
		//受け側ファイル名指定
		strDestFiles+=strDestPath+lpSrc;
		strDestFiles+=_T('|');
	}
	strSrcFiles+=_T('|');
	strDestFiles+=_T('|');

	//'|'を'\0'に変換する
	std::vector<TCHAR> srcBuf(strSrcFiles.GetLength()+1);
	UtilMakeFilterString(strSrcFiles,&srcBuf[0],srcBuf.size());
	std::vector<TCHAR> destBuf(strDestFiles.GetLength()+1);
	UtilMakeFilterString(strDestFiles,&destBuf[0],destBuf.size());

	//ファイル操作内容
	SHFILEOPSTRUCT fileOp={0};
	fileOp.wFunc=FO_COPY;
	fileOp.fFlags=FOF_MULTIDESTFILES|FOF_NOCONFIRMATION|FOF_NOCONFIRMMKDIR|FOF_NOCOPYSECURITYATTRIBS|FOF_NO_CONNECTED_ELEMENTS;
	fileOp.pFrom=&srcBuf[0];
	fileOp.pTo=&destBuf[0];

	//コピー実行
	if(::SHFileOperation(&fileOp)){
		//エラー
		strLog=CString(MAKEINTRESOURCE(IDS_ERROR_FILE_COPY));
		return false;
	}else if(fileOp.fAnyOperationsAborted){
		//キャンセル
		strLog=CString(MAKEINTRESOURCE(IDS_ERROR_USERCANCEL));
		return false;
	}

	//カレントディレクトリ設定
	::SetCurrentDirectory(tdm.GetDirPath());
	// 同時に、レスポンスファイル内にアーカイブ名および圧縮対象ファイル名を記入する
	{
		HANDLE hFile=CreateFile(ResponceFileName,GENERIC_WRITE,0,NULL,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,NULL);
		if(INVALID_HANDLE_VALUE==hFile){
			strLog=CString(MAKEINTRESOURCE(IDS_ERROR_TEMPORARY_FILE_ACCESS));
			return false;
		}
		//レスポンスファイルへの書き込み
		//全て圧縮
		WriteResponceFile(hFile,_T("*"));
		CloseHandle(hFile);
	}


	//===========================
	// DLLに渡すオプションの設定
	//===========================
	TRACE(_T("DLLに渡すオプションの設定\n"));

	CString Param;//コマンドライン パラメータ バッファ

	CConfigZIP confZIP;
	CConfig7Z  conf7Z;
	ASSERT(ArchiverGetArchiveType);
	switch(ArchiverGetArchiveType(C2UTF8(ArcFileName))){
	case 1:	//ZIP形式で圧縮
		confZIP.load(ConfMan);
		if(!FormatCompressCommandZIP(confZIP,Param,false,0,NULL,NULL,strLog)){
			DeleteFile(ResponceFileName);
			return false;
		}
		break;
	case 2:	//7z形式で圧縮
		conf7Z.load(ConfMan);
		if(!FormatCompressCommand7Z(conf7Z,Param,0,NULL,strLog)){
			DeleteFile(ResponceFileName);
			return false;
		}
		break;
	default:
		ASSERT(!"This code cannot be run");
		//エラー処理が面倒なので放っておく。
		return false;
	}

	Param+=_T("-scsUTF-8 ");	//レスポンスファイルのコードページ指定

	//作業ディレクトリ
	Param+=_T("\"-w");
	Param+=UtilGetTempPath();
	Param+=_T("\" ");

	//圧縮先ファイル名指定
	Param+=_T("\"");
	Param+=ArcFileName;
	Param+=_T("\" ");

	//レスポンスファイル名指定
	Param+=_T("\"@");
	Param+=ResponceFileName;
	Param+=_T("\"");

	ASSERT(!Param.IsEmpty());
	TRACE(_T("ArchiveHandler Commandline Parameter:%s\n"),Param);

	TRACE(_T("ArchiveHandler呼び出し\n"));
	//char szLog[LOG_BUFFER_SIZE]={0};
	std::vector<BYTE> szLog(LOG_BUFFER_SIZE);
	szLog[0]='\0';
	int Ret=ArchiveHandler(NULL,C2UTF8(Param),(LPSTR)&szLog[0],LOG_BUFFER_SIZE-1);
	CString strTmp;
	UtilToUNICODE(strTmp,&szLog[0],szLog.size()-1,UTILCP_UTF8);
	//strLog=&szLog[0];
	strLog=strTmp;

	//使ったレスポンスファイルは消去
	DeleteFile(ResponceFileName);

	return 0==Ret;
}
Ejemplo n.º 4
0
void testTDM(void) {
  std::default_random_engine generator;
  std::uniform_real_distribution<double> distribution(-1000., 1000.);
  auto rnd = std::bind(distribution, generator);

  std::size_t N = 10;

  vec a(N, 0.);
  vec a2(N, 0.);
  vec b(N, 0.);
  vec b2(N, 0.);
  vec c(N-1, 0);
  vec c2(N-1, 0);

  b[0] = rnd();
  c[0] = rnd();
  for (std::size_t i=1; i<N-1; i++) {
    a[i] = rnd();
    a2[i] = rnd();
    b[i] = rnd();
    b2[i] = rnd();
    c[i] = rnd();
    c2[i] = rnd();
  }
  a[N-1] = rnd();
  b[N-1] = rnd();
  TDM tdm(a, b, c);
  const TDM tdm2(a2, b2, c2);
  tdm.add(tdm2);
  vtype s = rnd();
  tdm.scale(s);

  auto a3 = tdm.get(TDM::Diagonal::A);
  auto a4 = tdm.get(TDM::Diagonal::A, true);
  auto b3 = tdm.get(TDM::Diagonal::B);
  auto b4 = tdm.get(TDM::Diagonal::B, true);
  auto c3 = tdm.get(TDM::Diagonal::C);
  auto c4 = tdm.get(TDM::Diagonal::C, true);

  a4.insert(a4.begin(), 0.);

  assert(a3.size() == a4.size());
  assert(a4.size() == b3.size());
  assert(b3.size() == b4.size());
  assert(b4.size() == c3.size()+1);
  assert(c3.size() == c4.size());
  assert(c4.size()+1 == N);

  for (size_t i=0; i<N; i++) {
    assert(std::abs(a3[i] - a4[i]) < 1e-10);
    assert(std::abs(b3[i] - b4[i]) < 1e-10);
    assert(std::abs(c3[i] - c4[i]) < 1e-10);

    assert(std::abs(a3[i] - s*(a[i]+a2[i])) < 1e-10);
    assert(std::abs(b3[i] - s*(b[i]+b2[i])) < 1e-10);
    assert(std::abs(c3[i] - s*(c[i]+c2[i])) < 1e-10);
  }

  vec x(N, 0.);
  for (size_t i=0; i<N; i++) {
    x[i] = rnd();
  }

  const TDM tdm3(tdm);
  auto inverted = tdm3.invert(x);
  auto y = tdm.transform(inverted);

  for (size_t i=0; i<N; i++) {
    assert(std::abs(x[i] - y[i]) < 1e-10);
  }
}