using System ;
using System.Collections.Generic ;
using System.Runtime.InteropServices ;
using System.Text ;


namespace DxLibDLL
{


	public static partial class DX
	{


		/// <summary> 指定のＤＸＡファイルを丸ごとメモリに読み込む( 戻り値: -1=エラー  0=成功 ) </summary>
		public static void DXArchivePreLoad( string FilePath )
		{
			DXArchivePreLoad( FilePath , false ) ;
		}

		/// <summary> 指定のＤＸＡファイルを丸ごとメモリに読み込む( 戻り値: -1=エラー  0=成功 ) </summary>
		public static void DXArchivePreLoad( string FilePath , bool ASync )
		{
			lock( locker )
			{
				int result = dx_DXArchivePreLoad( FilePath , ASync ) ;
				if( !( result == 0 ) ) { throw new DX.Exception(); }
			}
		}

	#if UNICODE
		[ DllImport( "DxLibW.dll" , CharSet = CharSet.Unicode , ExactSpelling = true ) ]
	#else
		[ DllImport( "DxLib.dll" , CharSet = CharSet.Ansi , ExactSpelling = true ) ]
	#endif
		private static extern int dx_DXArchivePreLoad( string FilePath , bool ASync ) ;


		/// <summary> 指定のＤＸＡファイルの事前読み込みが完了したかどうかを取得する( 戻り値： TRUE=完了した FALSE=まだ ) </summary>
		public static bool DXArchiveCheckIdle( string FilePath )
		{
			lock( locker )
			{
				int result = dx_DXArchiveCheckIdle( FilePath ) ;
				if( result == 0 ) { return false ; }
				else if( result == 1 ) { return true ; }
				else { throw new DX.Exception() ; }
			}
		}

	#if UNICODE
		[ DllImport( "DxLibW.dll" , CharSet = CharSet.Unicode , ExactSpelling = true ) ]
	#else
		[ DllImport( "DxLib.dll" , CharSet = CharSet.Ansi , ExactSpelling = true ) ]
	#endif
		private static extern int dx_DXArchiveCheckIdle( string FilePath ) ;


		/// <summary> 指定のＤＸＡファイルをメモリから解放する </summary>
		public static void DXArchiveRelease( string FilePath )
		{
			lock( locker )
			{
				int result = dx_DXArchiveRelease( FilePath ) ;
				if( !( result == 0 ) ) { throw new DX.Exception(); }
			}
		}

	#if UNICODE
		[ DllImport( "DxLibW.dll" , CharSet = CharSet.Unicode , ExactSpelling = true ) ]
	#else
		[ DllImport( "DxLib.dll" , CharSet = CharSet.Ansi , ExactSpelling = true ) ]
	#endif
		private static extern int dx_DXArchiveRelease( string FilePath ) ;


		/// <summary> ＤＸＡファイルの中に指定のファイルが存在するかどうかを調べる、TargetFilePath はＤＸＡファイルをカレントフォルダとした場合のパス( 戻り値:  -1=エラー  0:無い  1:ある ) </summary>
		public static bool DXArchiveCheckFile( string FilePath , string TargetFilePath )
		{
			lock( locker )
			{
				int result = dx_DXArchiveCheckFile( FilePath , TargetFilePath ) ;
				if( result == 0 ) { return false ; }
				else if( result == 1 ) { return true ; }
				else { throw new DX.Exception() ; }
			}
		}

	#if UNICODE
		[ DllImport( "DxLibW.dll" , CharSet = CharSet.Unicode , ExactSpelling = true ) ]
	#else
		[ DllImport( "DxLib.dll" , CharSet = CharSet.Ansi , ExactSpelling = true ) ]
	#endif
		private static extern int dx_DXArchiveCheckFile( string FilePath , string TargetFilePath ) ;
	}
}
