Esempio n. 1
0
        public override string ToString()
        {
            var buf = StringBuilderManager.Allocate();

            lock (_arena)
            {
                if (_head is null)
                {
                    StringBuilderManager.Free(buf);
                    return("none");
                }

                for (PoolChunk <T> cur = _head; ;)
                {
                    _   = buf.Append(cur);
                    cur = cur.Next;
                    if (cur is null)
                    {
                        break;
                    }
                    _ = buf.Append(StringUtil.Newline);
                }
            }

            return(StringBuilderManager.ReturnAndFree(buf));
        }
Esempio n. 2
0
        public static string CollapseWhitespace(this string str)
        {
            if (str == null)
            {
                return(null);
            }

            var sb       = StringBuilderManager.Allocate();
            var lastChar = (char)0;

            for (var i = 0; i < str.Length; i++)
            {
                var c = str[i];
                if (c < 32)
                {
                    continue;         // Skip all these
                }
                if (c == 32)
                {
                    if (lastChar == 32)
                    {
                        continue; // Only write one space character
                    }
                }
                sb.Append(c);
                lastChar = c;
            }

            return(StringBuilderManager.ReturnAndFree(sb));
        }
Esempio n. 3
0
        /// Returns the status of the allocator (which contains all metrics) as string. Be aware this may be expensive
        /// and so should not called too frequently.
        public string DumpStats()
        {
            int heapArenasLen = _heapArenas?.Length ?? 0;
            var buf           = StringBuilderManager.Allocate(512)
                                .Append(heapArenasLen)
                                .Append(" heap arena(s):")
                                .Append(StringUtil.Newline);

            if (heapArenasLen > 0)
            {
                // ReSharper disable once PossibleNullReferenceException
                foreach (PoolArena <byte[]> a in _heapArenas)
                {
                    _ = buf.Append(a);
                }
            }

            int directArenasLen = _directArenas?.Length ?? 0;

            _ = buf.Append(directArenasLen)
                .Append(" direct arena(s):")
                .Append(StringUtil.Newline);
            if (directArenasLen > 0)
            {
                // ReSharper disable once PossibleNullReferenceException
                foreach (PoolArena <byte[]> a in _directArenas)
                {
                    _ = buf.Append(a);
                }
            }

            return(StringBuilderManager.ReturnAndFree(buf));
        }
Esempio n. 4
0
        private static string AddQueryString(string uri, IEnumerable <KeyValuePair <string, string> > queryParams)
        {
            //if (uri is null) { ThrowHelper.ThrowArgumentNullException(ExceptionArgument.uri); }
            //if (queryString is null) { ThrowHelper.ThrowArgumentNullException(ExceptionArgument.queryString); }

            var anchorIndex     = uri.IndexOf('#');
            var uriToBeAppended = uri;
            var anchorText      = "";

            // If there is an anchor, then the query string must be inserted before its first occurance.
            if (anchorIndex != -1)
            {
                anchorText      = uri.Substring(anchorIndex);
                uriToBeAppended = uri.Substring(0, anchorIndex);
            }

            var queryIndex = uriToBeAppended.IndexOf('?');
            var hasQuery   = queryIndex != -1;

            var sb = StringBuilderManager.Allocate();

            _ = sb.Append(uriToBeAppended);
            foreach (var parameter in queryParams)
            {
                _        = sb.Append(hasQuery ? '&' : '?');
                _        = sb.Append(s_urlEncoder.Encode(parameter.Key));
                _        = sb.Append('=');
                _        = sb.Append(s_urlEncoder.Encode(parameter.Value));
                hasQuery = true;
            }

            _ = sb.Append(anchorText);
            return(StringBuilderManager.ReturnAndFree(sb));
        }
Esempio n. 5
0
        public static string CombinePaths(params string[] paths)
        {
            var sb = StringBuilderManager.Allocate();

            AppendPaths(sb, paths);
            return(StringBuilderManager.ReturnAndFree(sb));
        }
Esempio n. 6
0
        public static string HexUnescape(this string text, params char[] anyCharOf)
        {
            if (String.IsNullOrEmpty(text))
            {
                return(null);
            }
            if (anyCharOf == null || anyCharOf.Length == 0)
            {
                return(text);
            }

            var sb = StringBuilderManager.Allocate();

            var textLength = text.Length;

            for (var i = 0; i < textLength; i++)
            {
                var c = text.Substring(i, 1);
                if (c == "%")
                {
                    var hexNo = Convert.ToInt32(text.Substring(i + 1, 2), 16);
                    sb.Append((char)hexNo);
                    i += 2;
                }
                else
                {
                    sb.Append(c);
                }
            }

            return(StringBuilderManager.ReturnAndFree(sb));
        }
Esempio n. 7
0
        public static string HexEscape(this string text, params char[] anyCharOf)
        {
            if (string.IsNullOrEmpty(text))
            {
                return(text);
            }
            if (anyCharOf == null || anyCharOf.Length == 0)
            {
                return(text);
            }

            var encodeCharMap = new HashSet <char>(anyCharOf);

            var sb         = StringBuilderManager.Allocate();
            var textLength = text.Length;

            for (var i = 0; i < textLength; i++)
            {
                var c = text[i];
                if (encodeCharMap.Contains(c))
                {
                    sb.Append('%' + ((int)c).ToString("x"));
                }
                else
                {
                    sb.Append(c);
                }
            }
            return(StringBuilderManager.ReturnAndFree(sb));
        }
Esempio n. 8
0
        public static string UrlEncode(this string text, bool upperCase = false)
        {
            if (String.IsNullOrEmpty(text))
            {
                return(text);
            }

            var sb  = StringBuilderManager.Allocate();
            var fmt = upperCase ? "X2" : "x2";

            foreach (var charCode in Encoding.UTF8.GetBytes(text))
            {
                if (
                    charCode >= 65 && charCode <= 90 ||     // A-Z
                    charCode >= 97 && charCode <= 122 ||    // a-z
                    charCode >= 48 && charCode <= 57 ||     // 0-9
                    charCode >= 44 && charCode <= 46        // ,-.
                    )
                {
                    sb.Append((char)charCode);
                }
                else if (charCode == 32)
                {
                    sb.Append('+');
                }
                else
                {
                    sb.Append('%' + charCode.ToString(fmt));
                }
            }

            return(StringBuilderManager.ReturnAndFree(sb));
        }
Esempio n. 9
0
        internal static string BuildPath(List <JsonPosition> positions, JsonPosition?currentPosition)
        {
            int capacity = 0;

            if (positions != null)
            {
                for (int i = 0; i < positions.Count; i++)
                {
                    capacity += positions[i].CalculateLength();
                }
            }
            if (currentPosition != null)
            {
                capacity += currentPosition.GetValueOrDefault().CalculateLength();
            }

            var          sb     = StringBuilderManager.Allocate(capacity);
            StringWriter writer = null;

            char[] buffer = null;
            if (positions != null)
            {
                foreach (JsonPosition state in positions)
                {
                    state.WriteTo(sb, ref writer, ref buffer);
                }
            }
            if (currentPosition != null)
            {
                currentPosition.GetValueOrDefault().WriteTo(sb, ref writer, ref buffer);
            }

            return(StringBuilderManager.ReturnAndFree(sb));
        }
Esempio n. 10
0
        static string DecodeComponent(string s, int from, int toExcluded, Encoding charset, bool isPath)
        {
            int len = toExcluded - from;

            if (len <= 0)
            {
                return(StringUtil.EmptyString);
            }
            int firstEscaped = -1;

            for (int i = from; i < toExcluded; i++)
            {
                char c = s[i];
                if (c == HttpConstants.PercentChar || c == HttpConstants.PlusSignChar && !isPath)
                {
                    firstEscaped = i;
                    break;
                }
            }
            if (firstEscaped == -1)
            {
                return(s.Substring(from, len));
            }

            // Each encoded byte takes 3 characters (e.g. "%20")
            int decodedCapacity = (toExcluded - firstEscaped) / 3;
            var byteBuf         = new byte[decodedCapacity];
            int idx;
            var strBuf = StringBuilderManager.Allocate(len);

            _ = strBuf.Append(s, from, firstEscaped - from);

            for (int i = firstEscaped; i < toExcluded; i++)
            {
                char c = s[i];
                if (c != HttpConstants.PercentChar)
                {
                    _ = strBuf.Append(c != HttpConstants.PlusSignChar || isPath ? c : StringUtil.Space);
                    continue;
                }

                idx = 0;
                do
                {
                    if (i + 3 > toExcluded)
                    {
                        StringBuilderManager.Free(strBuf); ThrowHelper.ThrowArgumentException_UnterminatedEscapeSeq(i, s);
                    }
                    byteBuf[idx++] = StringUtil.DecodeHexByte(s, i + 1);
                    i += 3;
                }while (i < toExcluded && s[i] == HttpConstants.PercentChar);
                i--;

                _ = strBuf.Append(charset.GetString(byteBuf, 0, idx));
            }

            return(StringBuilderManager.ReturnAndFree(strBuf));
        }
Esempio n. 11
0
        /// <summary>
        ///     Formats an event and returns the formatted message
        /// </summary>
        /// <param name="ctx"></param>
        /// <param name="eventName">the name of the event</param>
        protected virtual string Format(IChannelHandlerContext ctx, string eventName)
        {
            string chStr = ctx.Channel.ToString();
            var    sb    = StringBuilderManager.Allocate(chStr.Length + 1 + eventName.Length)
                           .Append(chStr)
                           .Append(' ')
                           .Append(eventName);

            return(StringBuilderManager.ReturnAndFree(sb));
        }
Esempio n. 12
0
        public override string ToString()
        {
            var result = StringBuilderManager.Allocate();
            foreach (IByteBuffer buf in this.value)
            {
                _ = result.Append(buf.ToString(this.charset));
            }

            return StringBuilderManager.ReturnAndFree(result);
        }
Esempio n. 13
0
        public static string ToWcfJsonDateTimeOffset(DateTimeOffset dateTimeOffset)
        {
            var sb = StringBuilderManager.Allocate();

            using (var writer = new StringWriter(sb))
            {
                WriteWcfJsonDateTimeOffset(writer, dateTimeOffset);
                return(StringBuilderManager.ReturnAndFree(sb));
            }
        }
Esempio n. 14
0
        public override string ToString()
        {
            var buf = StringBuilderManager.Allocate().Append(base.ToString());

            _ = buf.Append(StringUtil.Newline);
            this.AppendHeaders(buf);

            // Remove the last newline.
            buf.Length = buf.Length - StringUtil.Newline.Length;
            return(StringBuilderManager.ReturnAndFree(buf));
        }
        public static string ToMd5Hash(this byte[] bytes)
        {
            var hash = System.Security.Cryptography.MD5.Create().ComputeHash(bytes);
            var sb   = StringBuilderManager.Allocate();

            foreach (byte b in hash)
            {
                sb.Append(b.ToString("x2"));
            }
            return(StringBuilderManager.ReturnAndFree(sb));
        }
Esempio n. 16
0
        public static string Join<K, V>(this Dictionary<K, V> values, string itemSeperator, string keySeperator)
        {
            var sb = StringBuilderManager.Allocate();
            foreach (var entry in values)
            {
                if (sb.Length > 0)
                    sb.Append(itemSeperator);

                sb.Append(entry.Key).Append(keySeperator).Append(entry.Value);
            }
            return StringBuilderManager.ReturnAndFree(sb);
        }
Esempio n. 17
0
        string NewLongValue()
        {
            var buf = StringBuilderManager.Allocate(2 * this.data.Length + 5);
            int i   = 0;

            i = this.AppendHexDumpField(buf, i, MachineIdLen);
            i = this.AppendHexDumpField(buf, i, ProcessIdLen);
            i = this.AppendHexDumpField(buf, i, SequenceLen);
            i = this.AppendHexDumpField(buf, i, TimestampLen);
            i = this.AppendHexDumpField(buf, i, RandomLen);
            Debug.Assert(i == this.data.Length);
            var strValue = buf.ToString().Substring(0, buf.Length - 1); StringBuilderManager.Free(buf); return(strValue);
        }
Esempio n. 18
0
        public static string CombineWith(this string path, params object[] thesePaths)
        {
            if (thesePaths.Length == 1 && thesePaths[0] == null)
            {
                return(path);
            }

            var sb = StringBuilderManager.Allocate();

            sb.Append(path.TrimEnd('/', '\\'));
            AppendPaths(sb, ToStrings(thesePaths));
            return(StringBuilderManager.ReturnAndFree(sb));
        }
Esempio n. 19
0
        public static string Join <T>(this IEnumerable <T> values, string seperator)
        {
            var sb = StringBuilderManager.Allocate();

            foreach (var value in values)
            {
                if (sb.Length > 0)
                {
                    sb.Append(seperator);
                }
                sb.Append(value);
            }
            return(StringBuilderManager.ReturnAndFree(sb));
        }
Esempio n. 20
0
 public static string DoPrettyHexDump(IByteBuffer buffer, int offset, int length)
 {
     if (0u >= (uint)length)
     {
         return(string.Empty);
     }
     else
     {
         int rows = length / 16 + (0u >= (uint)(length % 15) ? 0 : 1) + 4;
         var buf  = StringBuilderManager.Allocate(rows * 80);
         AppendPrettyHexDump(buf, buffer, offset, length);
         return(StringBuilderManager.ReturnAndFree(buf));
     }
 }
Esempio n. 21
0
            public void TranslateHeaders(IEnumerable <HeaderEntry <ICharSequence, ICharSequence> > inputHeaders)
            {
                // lazily created as needed
                StringBuilder cookies = null;

                foreach (var entry in inputHeaders)
                {
                    var name  = entry.Key;
                    var value = entry.Value;

                    if (_translations.TryGet(name, out var translatedName))
                    {
                        _ = _output.Add(translatedName, AsciiString.Of(value));
                    }
                    else if (!PseudoHeaderName.IsPseudoHeader(name))
                    {
                        // https://tools.ietf.org/html/rfc7540#section-8.1.2.3
                        // All headers that start with ':' are only valid in HTTP/2 context
                        if (0u >= (uint)name.Count || name[0] == ':')
                        {
                            StringBuilderManager.Free(cookies);
                            ThrowHelper.ThrowStreamError_InvalidHttp2HeaderEncounteredInTranslationToHttp1(_streamId, name);
                        }
                        var cookie = HttpHeaderNames.Cookie;
                        if (cookie.Equals(name))
                        {
                            // combine the cookie values into 1 header entry.
                            // https://tools.ietf.org/html/rfc7540#section-8.1.2.5
                            if (cookies is null)
                            {
                                cookies = StringBuilderManager.Allocate();
                            }
                            else if ((uint)cookies.Length > 0u)
                            {
                                _ = cookies.Append("; ");
                            }
                            _ = cookies.Append(value.ToString());
                        }
                        else
                        {
                            _ = _output.Add(AsciiString.Of(name), value);
                        }
                    }
                }
                if (cookies is object)
                {
                    _ = _output.Add(HttpHeaderNames.Cookie, StringBuilderManager.ReturnAndFree(cookies));
                }
            }
        private static string GetTypesKey(params Type[] types)
        {
            var sb = StringBuilderManager.Allocate();

            foreach (var type in types)
            {
                if (sb.Length > 0)
                {
                    sb.Append(">");
                }

                sb.Append(type.FullName);
            }
            return(StringBuilderManager.ReturnAndFree(sb));
        }
        public static string ToXsdDuration(TimeSpan timeSpan)
        {
            var sb = StringBuilderManager.Allocate();

            sb.Append(timeSpan.Ticks < 0 ? "-P" : "P");

            double ticks         = Math.Abs(timeSpan.Ticks);
            double totalSeconds  = ticks / TimeSpan.TicksPerSecond;
            int    wholeSeconds  = (int)totalSeconds;
            int    seconds       = wholeSeconds;
            int    sec           = (seconds >= 60 ? seconds % 60 : seconds);
            int    min           = (seconds = (seconds / 60)) >= 60 ? seconds % 60 : seconds;
            int    hours         = (seconds = (seconds / 60)) >= 24 ? seconds % 24 : seconds;
            int    days          = seconds / 24;
            double remainingSecs = sec + (totalSeconds - wholeSeconds);

            if (days > 0)
            {
                sb.Append(days + "D");
            }

            if (days == 0 || hours + min + sec + remainingSecs > 0)
            {
                sb.Append("T");
                if (hours > 0)
                {
                    sb.Append(hours + "H");
                }

                if (min > 0)
                {
                    sb.Append(min + "M");
                }

                if (remainingSecs > 0)
                {
                    var secFmt = string.Format(CultureInfo.InvariantCulture, "{0:0.0000000}", remainingSecs);
                    secFmt = secFmt.TrimEnd('0').TrimEnd('.');
                    sb.Append(secFmt + "S");
                }
                else if (sb.Length == 2) //PT
                {
                    sb.Append("0S");
                }
            }

            return(StringBuilderManager.ReturnAndFree(sb));
        }
Esempio n. 24
0
        public override string ToString()
        {
            var freeBytes = FreeBytes;
            var sb        = StringBuilderManager.Allocate()
                            .Append("Chunk(")
                            .Append(RuntimeHelpers.GetHashCode(this).ToString("X"))
                            .Append(": ")
                            .Append(Usage)
                            .Append("%, ")
                            .Append(_chunkSize - freeBytes)
                            .Append('/')
                            .Append(_chunkSize)
                            .Append(')');

            return(StringBuilderManager.ReturnAndFree(sb));
        }
Esempio n. 25
0
        internal static string Underscored(IEnumerable <char> pascalCase)
        {
            var sb = StringBuilderManager.Allocate();
            var i  = 0;

            foreach (var c in pascalCase)
            {
                if (char.IsUpper(c) && i > 0)
                {
                    sb.Append("_");
                }
                sb.Append(c);
                i++;
            }
            return(StringBuilderManager.ReturnAndFree(sb).ToLowerInvariant());
        }
Esempio n. 26
0
        public override string ToString()
        {
            var sb = StringBuilderManager.Allocate(256);

            _ = sb.Append(StringUtil.SimpleClassName(this))
                .Append("(usedHeapMemory: ").Append(UsedHeapMemory)
                .Append("; usedDirectMemory: ").Append(UsedDirectMemory)
                .Append("; numHeapArenas: ").Append(HeapArenas().Count)
                .Append("; numDirectArenas: ").Append(DirectArenas().Count)
                .Append("; tinyCacheSize: ").Append(TinyCacheSize)
                .Append("; smallCacheSize: ").Append(SmallCacheSize)
                .Append("; normalCacheSize: ").Append(NormalCacheSize)
                .Append("; numThreadLocalCaches: ").Append(NumThreadLocalCaches())
                .Append("; chunkSize: ").Append(ChunkSize).Append(')');
            return(StringBuilderManager.ReturnAndFree(sb));
        }
Esempio n. 27
0
        public static string AppendUrlPathsRaw(this string uri, params string[] uriComponents)
        {
            var sb = StringBuilderManager.Allocate();

            sb.Append(uri.WithTrailingSlash());
            var i = 0;

            foreach (var uriComponent in uriComponents)
            {
                if (i++ > 0)
                {
                    sb.Append('/');
                }
                sb.Append(uriComponent);
            }
            return(StringBuilderManager.ReturnAndFree(sb));
        }
Esempio n. 28
0
        public static string HtmlDecode(string value)
        {
            if (string.IsNullOrEmpty(value))
            {
                return(value);
            }

            // Don't create StringBuilder if we don't have anything to encode
            if (!StringRequiresHtmlDecoding(value))
            {
                return(value);
            }

            var sb = StringBuilderManager.Allocate(value.Length);

            HtmlDecodeImpl(value, sb);
            return(StringBuilderManager.ReturnAndFree(sb));
        }
Esempio n. 29
0
        public static string CombineWith(this string path, params string[] thesePaths)
        {
            if (path == null)
            {
                path = "";
            }

            if (thesePaths.Length == 1 && thesePaths[0] == null)
            {
                return(path);
            }
            var startPath = path.Length > 1 ? path.TrimEnd('/', '\\') : path;

            var sb = StringBuilderManager.Allocate();

            sb.Append(startPath);
            AppendPaths(sb, thesePaths);
            return(StringBuilderManager.ReturnAndFree(sb));
        }
Esempio n. 30
0
        /// <summary>
        /// Generate an HTTP/2 <c> :path</c> from a URI in accordance with
        /// <a href="https://tools.ietf.org/html/rfc7230#section-5.3">rfc7230, 5.3</a>.
        /// </summary>
        /// <param name="uri"></param>
        /// <returns></returns>
        private static AsciiString ToHttp2Path(Uri uri)
        {
            var pathBuilder  = StringBuilderManager.Allocate();
            var pathAndQuery = uri.PathAndQuery;

            if (!string.IsNullOrEmpty(pathAndQuery))
            {
                _ = pathBuilder.Append(pathAndQuery);
            }
            var fragment = uri.Fragment;

            if (!string.IsNullOrEmpty(fragment))
            {
                _ = pathBuilder.Append(fragment);
            }
            var path = StringBuilderManager.ReturnAndFree(pathBuilder);

            return(string.IsNullOrEmpty(path) ? EmptyRequestPath : new AsciiString(path));
        }