Jypeli  5
The simple game programming library
StringList.cs
Siirry tämän tiedoston dokumentaatioon.
1 using System;
2 using System.Collections.Generic;
3 using System.IO;
4 
5 namespace Jypeli
6 {
10  public class StringList : INotifyList<string>
11  {
12  List<string> strings = new List<string>();
13 
14 
15  public IEnumerator<string> GetEnumerator()
16  {
17  return strings.GetEnumerator();
18  }
19 
20  /*
21  * Since IEnumerable<T> inherits from non-generic IEnumerable (which is pretty odd...),
22  * we have to provide this GetEnumerator() method as well.
23  */
24  System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator()
25  {
26  return GetEnumerator();
27  }
28 
34  public string this[int index]
35  {
36  get { return strings[index]; }
37  set { strings[index] = value; }
38  }
39 
46  public static StringList operator +( StringList a, object b )
47  {
48  return new StringList( a ).Add( b );
49  }
50 
57  public static StringList operator +( object a, StringList b )
58  {
59  return new StringList( a ).Add( b );
60  }
61 
67  public static implicit operator List<String>( StringList list )
68  {
69  return list.strings;
70  }
71 
77  public static implicit operator StringList( List<String> list )
78  {
79  return new StringList( list );
80  }
81 
87  public static implicit operator String[]( StringList list )
88  {
89  return list.strings.ToArray();
90  }
91 
97  public static implicit operator StringList( String[] array )
98  {
99  return new StringList( array );
100  }
101 
105  public bool IsReadOnly { get { return false; } }
106 
112  public int Length
113  {
114  get { return strings.Count; }
115  set
116  {
117  if ( value < strings.Count )
118  {
119  strings.RemoveRange( value, strings.Count - value );
120  }
121 
122  else if ( value > strings.Count )
123  {
124  for ( int i = value; i < strings.Count; i++ )
125  strings.Add( "" );
126  }
127  }
128  }
129 
135  public int Count { get { return Length; } /*set { Length = value; }*/ }
136 
140  public event Action Changed;
141 
142  private void OnChanged()
143  {
144  if ( Changed != null )
145  Changed();
146  }
147 
151  public StringList()
152  {
153  }
154 
159  public StringList( StringList source )
160  {
161  strings.AddRange( source.strings );
162  }
163 
168  public StringList( List<string> source )
169  {
170  strings.AddRange( source );
171  }
172 
177  public StringList( object source )
178  {
179  Add( source );
180  }
181 
187  public StringList( params string[] source )
188  {
189  strings.AddRange( source );
190  }
191 
196  public static StringList FromAsset( string assetName )
197  {
198  return new StringList( Game.Instance.Content.Load<string[]>( assetName ) );
199  }
200 
205  internal StringList AssignFrom( Stream stream )
206  {
207  using ( StreamReader input = new StreamReader( stream ) )
208  {
209  string line;
210  while ( ( line = input.ReadLine() ) != null )
211  {
212  strings.Add( line );
213  }
214  }
215 
216  OnChanged();
217  return this;
218  }
219 
226  public static StringList FromFile( string path )
227  {
228  StringList result = new StringList();
229 
230  using ( StreamReader input = File.OpenText( path ) )
231  {
232  string line;
233  while ( ( line = input.ReadLine() ) != null )
234  {
235  result.Add( line );
236  }
237  }
238 
239  return result;
240  }
241 
247  public StringList Add( params string[] lines )
248  {
249  strings.AddRange( lines );
250  OnChanged();
251  return this;
252  }
253 
259  public StringList Add( StringList list )
260  {
261  strings.AddRange( list.strings );
262  OnChanged();
263  return this;
264  }
265 
271  public StringList Add( List<String> list )
272  {
273  strings.AddRange( list );
274  OnChanged();
275  return this;
276  }
277 
283  public StringList Add( object obj )
284  {
285  if ( obj is StringList ) return this.Add( (StringList)obj );
286  if ( obj is ICollection<object> )
287  {
288  foreach ( object element in (ICollection<object>)obj )
289  {
290  this.Add( element );
291  }
292  }
293 
294  return this.Add( obj.ToString() );
295  }
296 
303  public StringList RemoveAll( params string[] lines )
304  {
305  for ( int i = 0; i < lines.Length; i++ )
306  {
307  while ( strings.Remove( lines[i] ) ) ;
308  }
309 
310  OnChanged();
311  return this;
312  }
313 
320  public StringList RemoveAll( List<string> list )
321  {
322  for ( int i = 0; i < list.Count; i++ )
323  {
324  while ( strings.Remove( list[i] ) ) ;
325  }
326 
327  OnChanged();
328  return this;
329  }
330 
338  {
339  return RemoveAll( list.strings );
340  }
341 
348  public StringList RemoveFirst( params string[] lines )
349  {
350  for ( int i = 0; i < lines.Length; i++ )
351  {
352  strings.Remove( lines[i] );
353  }
354 
355  OnChanged();
356  return this;
357  }
358 
365  public StringList RemoveFirst( List<string> list )
366  {
367  for ( int i = 0; i < list.Count; i++ )
368  {
369  strings.Remove( list[i] );
370  }
371 
372  OnChanged();
373  return this;
374  }
375 
383  {
384  return RemoveFirst( list.strings );
385  }
386 
393  public StringList RemoveLast( params string[] lines )
394  {
395  for ( int i = lines.Length - 1; i >= 0; i-- )
396  {
397  strings.Remove( lines[i] );
398  }
399 
400  OnChanged();
401  return this;
402  }
403 
410  public StringList RemoveLast( List<string> list )
411  {
412  for ( int i = list.Count - 1; i >= 0; i-- )
413  {
414  strings.Remove( list[i] );
415  }
416 
417  OnChanged();
418  return this;
419  }
420 
428  {
429  return RemoveLast( list.strings );
430  }
431 
437  public bool Contains( string line )
438  {
439  for ( int i = 0; i < strings.Count; i++ )
440  {
441  if ( strings[i] == line ) return true;
442  }
443 
444  return false;
445  }
446 
453  public string FirstBeginningWith( string line )
454  {
455  for ( int i = 0; i < strings.Count; i++ )
456  {
457  if ( strings[i].Length < line.Length ) continue;
458  if ( strings[i].Substring( 0, line.Length ) == line ) return strings[i];
459  }
460 
461  return null;
462  }
463 
467  public void Clear()
468  {
469  strings.Clear();
470  OnChanged();
471  }
472  }
473 }
bool IsReadOnly
Voiko listaa vain lukea, ei kirjoittaa.
Definition: StringList.cs:105
StringList(StringList source)
Luo uuden merkkijonolistan olemassaolevan kopiona.
Definition: StringList.cs:159
Action Changed
Tapahtuu kun listan sisältö muuttuu.
Definition: StringList.cs:140
StringList Add(object obj)
Lisää olion merkkijonolistan perään.
Definition: StringList.cs:283
StringList RemoveLast(StringList list)
Poistaa toisessa listassa määritellyt rivit. Vain ensimmäinen ilmentymä poistetaan.
Definition: StringList.cs:427
StringList RemoveLast(params string[] lines)
Poistaa yhden tai useamman rivin. Vain viimeinen ilmentymä poistetaan.
Definition: StringList.cs:393
static StringList FromFile(string path)
Lukee merkkijonolistan tiedostosta. Huom. toimii vain PC:llä, käytä mieluummin FromAsset-metodia jos vai...
Definition: StringList.cs:226
int Count
Listan pituus. Jos asetetaan pienemmäksi kuin nykyinen koko, ylimenevät rivit poistetaan. Jos asetetaan suuremmaksi kuin nykyinen koko, lisätään tyhjiä rivejä.
Definition: StringList.cs:135
IEnumerator< string > GetEnumerator()
Definition: StringList.cs:15
string FirstBeginningWith(string line)
Palauttaa listasta ensimmäisen annetulla merkkijonolla alkavan merkkijonon.
Definition: StringList.cs:453
StringList(object source)
Luo uuden merkkijonolistan oliosta.
Definition: StringList.cs:177
static Game Instance
Definition: Game.cs:149
StringList RemoveAll(StringList list)
Poistaa toisessa listassa määritellyt rivit. Kaikki rivin ilmentymät poistetaan.
Definition: StringList.cs:337
bool Contains(string line)
Tarkistaa, löytyykö rivi listasta.
Definition: StringList.cs:437
void Clear()
Tyhjentää listan.
Definition: StringList.cs:467
StringList RemoveFirst(params string[] lines)
Poistaa yhden tai useamman rivin. Vain ensimmäinen ilmentymä poistetaan.
Definition: StringList.cs:348
Peliluokka reaaliaikaisille peleille.
Definition: DebugScreen.cs:10
StringList RemoveFirst(StringList list)
Poistaa toisessa listassa määritellyt rivit. Vain ensimmäinen ilmentymä poistetaan.
Definition: StringList.cs:382
StringList Add(params string[] lines)
Lisää yhden tai useamman rivin merkkijonolistaan.
Definition: StringList.cs:247
StringList RemoveAll(List< string > list)
Poistaa listassa määritellyt rivit. Kaikki rivin ilmentymät poistetaan.
Definition: StringList.cs:320
StringList(List< string > source)
Luo uuden merkkijonolistan olemassaolevan kopiona.
Definition: StringList.cs:168
static StringList FromAsset(string assetName)
Lukee merkkijonolistan Content-projektin tekstitiedostosta.
Definition: StringList.cs:196
StringList RemoveFirst(List< string > list)
Poistaa listassa määritellyt rivit. Vain ensimmäinen ilmentymä poistetaan.
Definition: StringList.cs:365
int Length
Listan pituus. Jos asetetaan pienemmäksi kuin nykyinen koko, ylimenevät rivit poistetaan. Jos asetetaan suuremmaksi kuin nykyinen koko, lisätään tyhjiä rivejä.
Definition: StringList.cs:113
Järjestetty lista merkkijonoja.
Definition: StringList.cs:10
StringList Add(StringList list)
Lisää toisen merkkijonolistan tämän perään.
Definition: StringList.cs:259
StringList RemoveAll(params string[] lines)
Poistaa yhden tai useamman rivin. Kaikki rivin ilmentymät poistetaan.
Definition: StringList.cs:303
StringList()
Luo uuden tyhjän merkkijonolistan.
Definition: StringList.cs:151
StringList Add(List< String > list)
Lisää toisen merkkijonolistan tämän perään.
Definition: StringList.cs:271
StringList(params string[] source)
Luo uuden merkkijonolistan taulukosta tai parametrina annetuista merkkijonoista.
Definition: StringList.cs:187
StringList RemoveLast(List< string > list)
Poistaa listassa määritellyt rivit. Vain ensimmäinen ilmentymä poistetaan.
Definition: StringList.cs:410
static StringList operator+(StringList a, object b)
Jatkaa listaa oliolla, joka voi olla toinen lista, toinen merkkijono jne.
Definition: StringList.cs:46
Lista, joka ilmoittaa muutoksistaan.
Definition: INotifyList.cs:12