1+ using  System . Collections . Generic ; 
2+ using  System . IO ; 
3+ 
4+ namespace  MsieJavaScriptEngine . Utilities 
5+ { 
6+ 	/// <summary> 
7+ 	/// Unique document name manager 
8+ 	/// </summary> 
9+ 	internal  sealed  class  UniqueDocumentNameManager 
10+ 	{ 
11+ 		/// <summary> 
12+ 		/// Default document name 
13+ 		/// </summary> 
14+ 		private  readonly  string  _defaultName ; 
15+ 
16+ 		/// <summary> 
17+ 		/// Storage of unique names 
18+ 		/// </summary> 
19+ 		private  readonly  Dictionary < string ,  uint >  _storage  =  new  Dictionary < string ,  uint > ( ) ; 
20+ 
21+ 		/// <summary> 
22+ 		/// Synchronizer of unique name storage 
23+ 		/// </summary> 
24+ 		private  readonly  object  _storageSynchronizer  =  new  object ( ) ; 
25+ 
26+ 
27+ 		/// <summary> 
28+ 		/// Constructs an instance of the unique document name manager 
29+ 		/// </summary> 
30+ 		/// <param name="defaultName">Default document name</param> 
31+ 		public  UniqueDocumentNameManager ( string  defaultName ) 
32+ 		{ 
33+ 			_defaultName  =  defaultName ; 
34+ 		} 
35+ 
36+ 
37+ 		/// <summary> 
38+ 		/// Gets a unique document name 
39+ 		/// </summary> 
40+ 		/// <param name="name">Document name</param> 
41+ 		/// <returns>Unique document name</returns> 
42+ 		public  string  GetUniqueName ( string  name ) 
43+ 		{ 
44+ 			string  appropriateName  =  ! string . IsNullOrWhiteSpace ( name )  ? 
45+ 				Path . GetFileNameWithoutExtension ( name )  :  _defaultName ; 
46+ 			string  extension  =  Path . GetExtension ( name ) ; 
47+ 
48+ 			lock  ( _storageSynchronizer ) 
49+ 			{ 
50+ 				uint  count ; 
51+ 				_storage . TryGetValue ( appropriateName ,  out  count ) ; 
52+ 				_storage [ appropriateName ]  =  ++ count ; 
53+ 
54+ 				string  uniqueName  =  count  >  1  ? 
55+ 					string . Concat ( appropriateName ,  " [" ,  count ,  "]" ,  extension ) 
56+ 					: 
57+ 					string . Concat ( appropriateName ,  extension ) 
58+ 					; 
59+ 
60+ 				return  uniqueName ; 
61+ 			} 
62+ 		} 
63+ 	} 
64+ } 
0 commit comments