Exemplo n.º 1
0
        /// <summary>
        /// Формирует значение кеша для города
        /// </summary>
        /// <param name="city">Название города</param>
        /// <param name="startIndex">Начало интервала</param>
        /// <param name="endIndex">Конец интервала</param>
        /// <returns></returns>
        private byte[] AddCityCacheEntry(string city, int startIndex, int endIndex)
        {
            byte[] result;
            if (_cityCache.TryGetValue(city, out result))
            {
                return(result);
            }

            int bufferSize = 1;

            for (int i = startIndex; i <= endIndex; i++)
            {
                bufferSize += _locationCache[_db.GetLocationIdByNameIndex(i)].Length + 1;
            }

            JsonSerializer.Buffer buffer = new JsonSerializer.Buffer(bufferSize);

            JsonSerializer.StartArray(buffer);
            for (int i = startIndex; i <= endIndex; i++)
            {
                if (i > startIndex)
                {
                    JsonSerializer.Comma(buffer);
                }

                buffer.Write(_locationCache[_db.GetLocationIdByNameIndex(i)]);
            }

            JsonSerializer.EndArray(buffer);

            result = buffer.GetByteArray();
            _cityCache.TryAdd(city, result);
            return(result);
        }
Exemplo n.º 2
0
        /// <summary>
        /// Формирует значение кеша местоположения
        /// </summary>
        /// <param name="i">Идентификатор местоположения</param>
        /// <param name="buffer">Буфер</param>
        /// <returns></returns>
        private unsafe byte[] GetLocationJson(int i, JsonSerializer.Buffer buffer)
        {
            buffer.Reset();
            LocationRecord rec = _db.GetLocationRecordById(i);

            JsonSerializer.WriteLocationRecord(buffer, rec);
            return(buffer.GetByteArray());
        }