wasSharp – Blame information for rev 56

Subversion Repositories:
Rev:
Rev Author Line No. Line
1 zed 1 ///////////////////////////////////////////////////////////////////////////
2 // Copyright (C) Wizardry and Steamworks 2013 - License: GNU GPLv3 //
3 // Please see: http://www.gnu.org/licenses/gpl.html for legal details, //
4 // rights of fair usage, the disclaimer and warranty conditions. //
5 ///////////////////////////////////////////////////////////////////////////
6  
7 using System;
8 using System.Collections.Generic;
56 office 9 using System.IO;
1 zed 10 using System.Linq;
56 office 11 using System.Text;
12 using System.Threading.Tasks;
1 zed 13  
55 office 14 namespace wasSharp.Languages
1 zed 15 {
7 office 16 public static class KeyValue
1 zed 17 {
18 ///////////////////////////////////////////////////////////////////////////
19 // Copyright (C) 2014 Wizardry and Steamworks - License: GNU GPLv3 //
20 ///////////////////////////////////////////////////////////////////////////
21 /// <summary>
56 office 22 /// Returns the value of a key from a key-value data string.
1 zed 23 /// </summary>
24 /// <returns>true if the key was found in data</returns>
7 office 25 public static string Get(string key, string data)
26 {
27 return data.Split('&')
1 zed 28 .AsParallel()
6 eva 29 .Select(o => o.Split('='))
27 office 30 .Where(o => o.Length.Equals(2) && string.Equals(o[0], key, StringComparison.Ordinal))
6 eva 31 .Select(o => o[1])
7 office 32 .FirstOrDefault();
33 }
1 zed 34  
35 ///////////////////////////////////////////////////////////////////////////
36 // Copyright (C) 2014 Wizardry and Steamworks - License: GNU GPLv3 //
37 ///////////////////////////////////////////////////////////////////////////
38 /// <summary>
56 office 39 /// Returns a key-value data string with a key set to a given value.
1 zed 40 /// </summary>
41 /// <returns>
56 office 42 /// a key-value data string or the empty string if either key or
43 /// value are empty
1 zed 44 /// </returns>
7 office 45 public static string Set(string key, string value, string data)
46 {
47 return string.Join("&", string.Join("&", data.Split('&')
48 .AsParallel()
49 .Select(o => o.Split('='))
27 office 50 .Where(o => o.Length.Equals(2) && !string.Equals(o[0], key, StringComparison.Ordinal))
7 office 51 .Select(o => string.Join("=", o[0], o[1]))), string.Join("=", key, value));
52 }
1 zed 53  
54 ///////////////////////////////////////////////////////////////////////////
55 // Copyright (C) 2014 Wizardry and Steamworks - License: GNU GPLv3 //
56 ///////////////////////////////////////////////////////////////////////////
57 /// <summary>
56 office 58 /// Deletes a key-value pair from a string referenced by a key.
1 zed 59 /// </summary>
60 /// <returns>a key-value pair string</returns>
7 office 61 public static string Delete(string key, string data)
62 {
63 return string.Join("&", data.Split('&')
1 zed 64 .AsParallel()
6 eva 65 .Select(o => o.Split('='))
27 office 66 .Where(o => o.Length.Equals(2) && !string.Equals(o[0], key, StringComparison.Ordinal))
23 office 67 .Select(o => string.Join("=", o[0], o[1])));
7 office 68 }
1 zed 69  
70 ///////////////////////////////////////////////////////////////////////////
71 // Copyright (C) 2014 Wizardry and Steamworks - License: GNU GPLv3 //
72 ///////////////////////////////////////////////////////////////////////////
73 /// <summary>
56 office 74 /// Decodes key-value pair data to a dictionary.
1 zed 75 /// </summary>
76 /// <returns>a dictionary containing the keys and values</returns>
7 office 77 public static Dictionary<string, string> Decode(string data)
78 {
79 return data.Split('&')
1 zed 80 .AsParallel()
6 eva 81 .Select(o => o.Split('='))
82 .Where(o => o.Length.Equals(2))
1 zed 83 .Select(o => new
84 {
6 eva 85 k = o[0],
86 v = o[1]
1 zed 87 })
88 .GroupBy(o => o.k)
23 office 89 .ToDictionary(o => o.Key, p => p.FirstOrDefault()?.v);
7 office 90 }
1 zed 91  
92 ///////////////////////////////////////////////////////////////////////////
93 // Copyright (C) 2014 Wizardry and Steamworks - License: GNU GPLv3 //
94 ///////////////////////////////////////////////////////////////////////////
95 /// <summary>
56 office 96 /// Serialises a dictionary to key-value data.
1 zed 97 /// </summary>
98 /// <returns>a key-value data encoded string</returns>
7 office 99 public static string Encode(Dictionary<string, string> data)
100 {
101 return string.Join("&", data.AsParallel().Select(o => string.Join("=", o.Key, o.Value)));
102 }
1 zed 103  
104 ///////////////////////////////////////////////////////////////////////////
105 // Copyright (C) 2014 Wizardry and Steamworks - License: GNU GPLv3 //
106 ///////////////////////////////////////////////////////////////////////////
6 eva 107 /// <summary>
56 office 108 /// Serializes a dictionary to key-value data.
24 office 109 /// </summary>
56 office 110 /// <param name="data">an input string</param>
24 office 111 /// <returns>a key-value data encoded string</returns>
112 public static string Encode(IEnumerable<KeyValuePair<string, string>> data)
113 {
114 return string.Join("&", data.AsParallel().Select(o => string.Join("=", o.Key, o.Value)));
115 }
116  
117 ///////////////////////////////////////////////////////////////////////////
56 office 118 // Copyright (C) 2018 Wizardry and Steamworks - License: GNU GPLv3 //
119 ///////////////////////////////////////////////////////////////////////////
120 /// <summary>
121 /// Asynchronously serializes a dictionary to key-value data.
122 /// </summary>
123 /// <param name="data">an input string</param>
124 /// <returns>a key-value data encoded string</returns>
125 public static string Encode(IEnumerable<KeyValuePair<Task<string>, Task<string>>> data)
126 {
127 return string.Join("&", data.AsParallel().Select(o => string.Join("=", o.Key.Result, o.Value.Result)));
128 }
129  
130 ///////////////////////////////////////////////////////////////////////////
24 office 131 // Copyright (C) 2014 Wizardry and Steamworks - License: GNU GPLv3 //
132 ///////////////////////////////////////////////////////////////////////////
133 /// <summary>
56 office 134 /// Escapes a dictionary's keys and values for sending as POST data.
6 eva 135 /// </summary>
24 office 136 public static IEnumerable<KeyValuePair<string, string>> Escape(IEnumerable<KeyValuePair<string, string>> data,
137 Func<string, string> func)
7 office 138 {
139 return data.AsParallel().ToDictionary(o => func(o.Key), p => func(p.Value));
140 }
56 office 141  
142 ///////////////////////////////////////////////////////////////////////////
143 // Copyright (C) 2014 Wizardry and Steamworks - License: GNU GPLv3 //
144 ///////////////////////////////////////////////////////////////////////////
145 /// <summary>
146 /// Escapes a dictionary's keys and values for sending as POST data.
147 /// </summary>
148 public static IEnumerable<KeyValuePair<Task<string>, Task<string>>> EscapeAsync(IEnumerable<KeyValuePair<string, string>> data,
149 Func<string, Task<string>> func)
150 {
151 return data.AsParallel().ToDictionary(async o => await func(o.Key), async p => await func(p.Value));
152 }
1 zed 153 }
27 office 154 }