using System; using System.Text; using System.Collections; using System.Collections.Specialized; namespace P4API { /// <summary> /// Subclass of Hashtable which provides additional methods for dealing with the psuedo-arrays passed from Perforce. /// </summary> public class P4Record { protected Record.FieldCollection _Fields = null; protected Record.ArrayFieldCollection _ArrayFields = null; internal P4Record(Hashtable sd) { _Fields = new Record.FieldCollection(); _ArrayFields = new Record.ArrayFieldCollection(); // first copy the Hashtable Hashtable ht = (Hashtable)sd.Clone(); ArrayList keys = new ArrayList(ht.Keys); foreach (string s in keys) { // the key may have been removed if it was an array, // so check here for that if (ht.ContainsKey(s)) { string keyBaseName = s; int lastNumericCharacter = s.Length; // look to see if the variable is an array // we define an array as: // there must exist a key that is all alpha followed by exactly 1 '0' // if that key exists, all other keys with that base alpha name followed by a number // will be an element in the array indexed by said number. while (s[lastNumericCharacter - 1] >= '0' && s[lastNumericCharacter - 1]<= '9') { lastNumericCharacter--; } if (lastNumericCharacter != s.Length) { keyBaseName = s.Substring(0, lastNumericCharacter); if (ht.ContainsKey(string.Format("{0}0", keyBaseName))) { int i = 0; ArrayList list = new ArrayList(); //spin the array string indexKey = string.Format("{0}0", keyBaseName); do { list.Add((string)ht[indexKey]); // remove it from the hashtable so we don't hit it again ht.Remove(indexKey); i++; indexKey = string.Format("{0}{1}", keyBaseName, i); } while (ht.ContainsKey(indexKey)); string[] sList = (string[])list.ToArray(typeof(string)); _ArrayFields.Add(keyBaseName, sList); } } else { _Fields.Add(s, (string)ht[s]); } } } } public Record.FieldCollection Fields { get { return _Fields; } } public Record.ArrayFieldCollection ArrayFields { get { return _ArrayFields; } } // default indexer is the Fields collection public string this[string index] { get { return _Fields[index]; } set { _Fields[index] = value; } } internal Hashtable AllFieldDictionary { get { Hashtable ret = new Hashtable(); // Add the scalar fields foreach (string key in _Fields.Keys) { ret.Add(key, _Fields[key]); } // Add the array fields foreach (string key in _ArrayFields.Keys) { for (int i = 0; i < _ArrayFields[key].Length; i++) { ret.Add(string.Format("{0}{1}", key, i), _ArrayFields[key][i]); } } return ret; } } } }
# | Change | User | Description | Committed | |
---|---|---|---|---|---|
#8 | 5830 | Shawn Hladky | P4.Net: reorg to support release branches | ||
#7 | 5824 | Shawn Hladky | P4.Net: Last bits of documentation for 0.9 | ||
#6 | 5812 | Shawn Hladky | P4.Net: More documentation. | ||
#5 | 5798 | Shawn Hladky |
P4.Net... still not ready for beta Added license to all files Added several doc files Misc bugs |
||
#4 | 5636 | Shawn Hladky |
1. Added test harness framework, and some initial tests 2. Fixed many bugs (oddly enough identified by the unit tests) 3. Fixes so will build 1.1 Framework (and build batch files actually work) 4. Pathetic attempt at documentation |
||
#3 | 5438 | Shawn Hladky | refactoring, and documentation code | ||
#2 | 5433 | Shawn Hladky | P4.Net More refactoring | ||
#1 | 5432 | Shawn Hladky | Refactoring step 2 -- rename source files | ||
//guest/shawn_hladky/P4.Net/src/P4API/P4ResultRecord.cs | |||||
#4 | 5431 | Shawn Hladky |
Refactoring... step 1. |
||
#3 | 5411 | Shawn Hladky | WIP -- forms are working now. | ||
#2 | 5373 | Shawn Hladky | P4.Net: Still WIP, but some things starting to work | ||
#1 | 5362 | Shawn Hladky | Chipping away at the API changes |