Merge pull request #3548 from cmp-/fix-sgen-resume-thread-win32
[mono.git] / mcs / class / System.Net.Http / System.Net.Http.Headers / TransferCodingWithQualityHeaderValue.cs
index 58ce676d5c6cbc38bfa2a894210de302a1bcc091..845b95ef5cba47f4ff0c40f8c2adc5e3e2f4f959 100644 (file)
@@ -26,6 +26,8 @@
 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 //
 
+using System.Collections.Generic;
+
 namespace System.Net.Http.Headers
 {
        public sealed class TransferCodingWithQualityHeaderValue : TransferCodingHeaderValue
@@ -41,14 +43,16 @@ namespace System.Net.Http.Headers
                        Quality = quality;
                }
 
+               private TransferCodingWithQualityHeaderValue ()
+               {
+               }
+
                public double? Quality {
                        get {
-                               throw new NotImplementedException ();
-                               // TODO: return Parameters.Get ("Quality");
+                               return QualityValue.GetValue (parameters);
                        }
-
                        set {
-                               // TODO: Parameters.Set ("Quality", value);
+                               QualityValue.SetValue (ref parameters, value);
                        }
                }
 
@@ -63,7 +67,39 @@ namespace System.Net.Http.Headers
 
                public static bool TryParse (string input, out TransferCodingWithQualityHeaderValue parsedValue)
                {
-                       throw new NotImplementedException ();
+                       var lexer = new Lexer (input);
+                       Token token;
+                       if (TryParseElement (lexer, out parsedValue, out token) && token == Token.Type.End)
+                               return true;
+
+                       parsedValue = null;
+                       return false;
+               }
+
+               internal static bool TryParse (string input, int minimalCount, out List<TransferCodingWithQualityHeaderValue> result)
+               {
+                       return CollectionParser.TryParse (input, minimalCount, TryParseElement, out result);
+               }
+
+               static bool TryParseElement (Lexer lexer, out TransferCodingWithQualityHeaderValue parsedValue, out Token t)
+               {
+                       parsedValue = null;
+
+                       t = lexer.Scan ();
+                       if (t != Token.Type.Token)
+                               return false;
+
+                       var result = new TransferCodingWithQualityHeaderValue ();
+                       result.value = lexer.GetStringValue (t);
+
+                       t = lexer.Scan ();
+
+                       // Parameters parsing
+                       if (t == Token.Type.SeparatorSemicolon && (!NameValueHeaderValue.TryParseParameters (lexer, out result.parameters, out t) || t != Token.Type.End))
+                               return false;
+
+                       parsedValue = result;
+                       return true;
                }
        }
 }