public static Dictionary <string, int> Facet(Query query, IndexSearcher s, string field)
        {
            StringIndex stringIndex = FieldCache_Fields.DEFAULT.GetStringIndex(s.GetIndexReader(), field);

            int[] c = new int[stringIndex.lookup.Length];
            SimpleFacets.FacetCollector facetCollector = new SimpleFacets.FacetCollector(c, stringIndex);
            s.Search(query, (HitCollector)facetCollector);
            SimpleFacets.DictionaryEntryQueue dictionaryEntryQueue = new SimpleFacets.DictionaryEntryQueue(stringIndex.lookup.Length);
            for (int index = 1; index < stringIndex.lookup.Length; ++index)
            {
                if (c[index] > 0 && stringIndex.lookup[index] != null && stringIndex.lookup[index] != "0")
                {
                    dictionaryEntryQueue.Insert((object)new SimpleFacets.FacetEntry(stringIndex.lookup[index], -c[index]));
                }
            }
            int num = dictionaryEntryQueue.Size();
            Dictionary <string, int> dictionary = new Dictionary <string, int>();

            for (int index = num - 1; index >= 0; --index)
            {
                SimpleFacets.FacetEntry facetEntry = dictionaryEntryQueue.Pop() as SimpleFacets.FacetEntry;
                dictionary.Add(facetEntry.Value, -facetEntry.Count);
            }
            return(dictionary);
        }
Esempio n. 2
0
        public async Task AddMultipleNonUnique_GetByQuery_ContainsOnlyUnique(int tasksCount)
        {
            using var index = new StringIndex <string>();
            var inputs = new Dictionary <string, IEnumerable <string> >();

            for (var i = 0; i < tasksCount; i++)
            {
                var nonUnique = Guid.NewGuid().ToString();
                inputs[Guid.NewGuid().ToString()] = new[] { nonUnique, nonUnique, nonUnique, nonUnique };
            }

            var tasks = new List <Task>();

            foreach (var(q, input) in inputs)
            {
                tasks.Add(Task.Run(() => index.Add(q, input.Take(2))));
                tasks.Add(Task.Run(() => index.Add(q, input.Skip(2))));
            }

            await Task.WhenAll(tasks);

            var getTasks = inputs.Keys.Select(q => Task.Run(() => new { Query = q, Result = index.Get(q) })).ToList();

            await Task.WhenAll(getTasks);

            foreach (var task in getTasks)
            {
                var(query, result) = (task.Result.Query, task.Result.Result);
                var input = inputs[query].ToList();
                Assert.All(input, x => Assert.Contains(x, result));
                Assert.Equal(1, result.Count);
                Assert.NotEqual(input.Count, result.Count);
                Assert.Equal(new HashSet <string>(input), result);
            }
        }
Esempio n. 3
0
        public static Dictionary <string, int> Facet(Query query, IndexSearcher s, string field)
        {
            StringIndex stringIndex = FieldCache_Fields.DEFAULT.GetStringIndex(s.GetIndexReader(), field);

            int[] array = new int[stringIndex.lookup.Length];
            SimpleFacets.FacetCollector results = new SimpleFacets.FacetCollector(array, stringIndex);
            s.Search(query, results);
            SimpleFacets.DictionaryEntryQueue dictionaryEntryQueue = new SimpleFacets.DictionaryEntryQueue(stringIndex.lookup.Length);
            for (int i = 1; i < stringIndex.lookup.Length; i++)
            {
                if (array[i] > 0 && stringIndex.lookup[i] != null && stringIndex.lookup[i] != "0")
                {
                    dictionaryEntryQueue.Insert(new SimpleFacets.FacetEntry(stringIndex.lookup[i], -array[i]));
                }
            }
            int num = dictionaryEntryQueue.Size();
            Dictionary <string, int> dictionary = new Dictionary <string, int>();

            for (int j = num - 1; j >= 0; j--)
            {
                SimpleFacets.FacetEntry facetEntry = dictionaryEntryQueue.Pop() as SimpleFacets.FacetEntry;
                dictionary.Add(facetEntry.Value, -facetEntry.Count);
            }
            return(dictionary);
        }
Esempio n. 4
0
        public async Task AddMultipleUnique_GetByQuery_EqualsWithInput(int tasksCount)
        {
            using var index = new StringIndex <string>();
            var inputs = new Dictionary <string, IEnumerable <string> >();

            for (var i = 0; i < tasksCount; i++)
            {
                inputs[Guid.NewGuid().ToString()] = new [] { Guid.NewGuid().ToString(), Guid.NewGuid().ToString(), Guid.NewGuid().ToString() }
            }
            ;

            var tasks = new List <Task>();

            foreach (var(q, input) in inputs)
            {
                tasks.Add(Task.Run(() => index.Add(q, input)));
            }

            await Task.WhenAll(tasks);

            var getTasks = inputs.Keys.Select(q => Task.Run(() => new { Query = q, Result = index.Get(q) })).ToList();

            await Task.WhenAll(getTasks);

            foreach (var task in getTasks)
            {
                var(query, result) = (task.Result.Query, task.Result.Result);
                var input = inputs[query];
                Assert.All(input, x => Assert.Contains(x, result));
            }
        }
        public void Test_Address_StringIndexSetter_GoodFormat()
        {
            //Arrange
            string Line1    = "unit 1 LineOne";
            string Line2    = "15 Some St LineTwo";
            string City     = "Ball Hills";
            string PostCode = "4036";
            string State    = "QLD";
            string Country  = "Australia";

            var Address = new Address();

            Address.Line       = new string[] { Line1, Line2 };
            Address.City       = City;
            Address.PostalCode = PostCode;
            Address.State      = State;
            Address.Country    = Country;

            StringIndex Index = new StringIndex();

            //Act
            Index = IndexSetterFactory.Create(typeof(StringIndex)).Set(Address, Index) as StringIndex;

            //Assert
            var ResultString = string.Format("{0} {1} {2} {3} {4} {5}", Line1, Line2, City, PostCode, State, Country);

            Assert.AreEqual(Index.String, Pyro.Common.Tools.StringSupport.ToLowerAndRemoveDiacritics(ResultString));
        }
Esempio n. 6
0
        public async Task Flush_GetByQuery_ReturnsEmpty(int tasksCount)
        {
            using var index = new StringIndex <string>();
            var inputs = new Dictionary <string, IEnumerable <string> >();

            for (var i = 0; i < tasksCount; i++)
            {
                inputs[Guid.NewGuid().ToString()] = new []
                {
                    Guid.NewGuid().ToString(), Guid.NewGuid().ToString(), Guid.NewGuid().ToString(),
                                               Guid.NewGuid().ToString(), Guid.NewGuid().ToString(), Guid.NewGuid().ToString()
                }
            }
            ;

            var tasks = new List <Task>();

            foreach (var(q, input) in inputs)
            {
                tasks.Add(Task.Run(() => index.Add(q, input)));
            }

            await Task.WhenAll(tasks);

            await Task.Run(() => index.Flush());

            var getTasks = inputs.Keys.Select(x => Task.Run(() => index.Get(x))).ToList();

            await Task.WhenAll(getTasks);

            foreach (var task in getTasks)
            {
                Assert.Empty(task.Result);
            }
        }
Esempio n. 7
0
        public void RemoveNull_DoNothing()
        {
            using var index = new StringIndex <string>();
            var result = index.Remove(null, new string[0]);

            Assert.False(result);
        }
Esempio n. 8
0
        public void GetNull_ReturnNothing()
        {
            using var index = new StringIndex <string>();
            var result = index.Get(null);

            Assert.Empty(result);
        }
Esempio n. 9
0
        public async Task OnAddEmpty_AddEventNotInvoked(int tasksCount)
        {
            using var index = new StringIndex <string>();
            var inputs = new Dictionary <string, IEnumerable <string> >();

            for (var i = 0; i < tasksCount; i++)
            {
                inputs[Guid.NewGuid().ToString()] = new string[0];
            }

            var triggered = 0;

            index.Added += (q, values) =>
            {
                var input = inputs[q];
                Assert.Equal(input, values);
                Interlocked.Increment(ref triggered);
            };

            var tasks = new List <Task>();

            foreach (var(q, input) in inputs)
            {
                tasks.Add(Task.Run(() => index.Add(q, input)));
            }

            await Task.WhenAll(tasks);

            Assert.Equal(0, triggered);
        }
Esempio n. 10
0
        public async Task OnAdd_AddEventInvoked_ReturnedAddedValue(int tasksCount)
        {
            using var index = new StringIndex <string>();
            var inputs = new Dictionary <string, string>();

            for (var i = 0; i < tasksCount; i++)
            {
                inputs[Guid.NewGuid().ToString()] = Guid.NewGuid().ToString();
            }

            var triggered = 0;

            index.Added += (q, values) =>
            {
                var input = inputs[q];
                Assert.Equal(new [] { input }, values);
                Interlocked.Increment(ref triggered);
            };

            var tasks = new List <Task>();

            foreach (var(q, input) in inputs)
            {
                tasks.Add(Task.Run(() => index.Add(q, input)));
            }

            await Task.WhenAll(tasks);

            Assert.Equal(tasksCount, triggered);
        }
Esempio n. 11
0
        /// <summary>
        /// Initialize all the elements of this index, as concurrently as possible.
        /// </summary>
        /// <param name="progressAction">Action called (from an arbitrary Task thread) to report completion of various index parts.</param>
        /// <returns>A task which is complete when the index is fully built.</returns>
        public Task InitializeAsync(Action <string> progressAction)
        {
            // All the things we want to do concurrently to index our data.
            // This is broken out as a separate list since it is useful to run these serially sometimes when debugging
            // (e.g. when the hacky Span sort code you found online starts hitting stack overflows, whereas the .NET 5
            // Span.Sort method just works...).
            List <(string, Action)> actions = new List <(string, Action)>
            {
                ("Sorted strings", () => StringIndex = new StringIndex(PackedExecution.StringTable)),
                ("Indexed pip names", () => PipNameIndex = new NameIndex(PackedExecution.PipTable.PipNameTable)),
                ("Indexed paths", () => PathIndex = new NameIndex(PackedExecution.PathTable)),
                ("Indexed pip dependents", () => PipDependents = PackedExecution.PipDependencies.Invert()),
                ("Indexed file consumers", () => FileConsumers = PackedExecution.ConsumedFiles.Invert()),
                ("Indexed produced files", () => ProducedFiles =
                     RelationTable <FileId, PipId>
                     .FromSingleValueTable(PackedExecution.FileProducer, PackedExecution.PipTable)
                     .Invert()),
                ("Indexed input-file-declaring pips", () => InputFileDeclarers = PackedExecution.DeclaredInputFiles.Invert()),
                ("Indexed input-directory-declaring pips", () => InputDirectoryDeclarers = PackedExecution.DeclaredInputDirectories.Invert()),
                ("Indexed parent directories", () => ParentDirectories = PackedExecution.DirectoryContents.Invert())
            };

            // Concurrently generate all the sorted strings, name indices, and inverse relationships that we need.
            return(Task.WhenAll(
                       actions
                       .Select(tuple => Task.Run(
                                   () =>
            {
                tuple.Item2();
                progressAction(tuple.Item1);
            }))
                       .ToArray()));
        }
        /// <summary>
        /// Initialises a new instance of the ModuleRefMetadataTableRow class
        /// </summary>
        /// <param name="contents">The contents of the file</param>
        /// <param name="offset">The offset of the current row</param>
        public ModuleRefMetadataTableRow(byte[] contents, Offset offset, IIndexDetails indexDetails)
        {
            this.FileOffset = offset;

            byte sizeOfStringIndex = indexDetails.GetSizeOfStringIndex();

            _name = new StringIndex(contents, sizeOfStringIndex, offset);
        }
Esempio n. 13
0
        public void AddNull_DoNothing()
        {
            using var index = new StringIndex <string>();
            index.Add(null, new string[0]);

            var result = index.Get(null);

            Assert.Empty(result);
        }
Esempio n. 14
0
        private void FreezeExtensions()
        {
            List <ExtensionInfo> mergedExtensions = new List <ExtensionInfo>();

            if (m_baseType != null)
            {
                mergedExtensions.AddRange(m_baseType.Extensions);
            }

            foreach (ExtensionInfo info in m_definitions.Extensions)
            {
                info.OwningType = this;

                ExtensionInfo baseInfo = null;
                if (m_baseType != null)
                {
                    baseInfo = m_baseType.GetExtensionInfo(info.Name);
                }

                if (baseInfo != null)
                {
                    // field is also present in base; make field compatible
                    info.Index        = baseInfo.Index;
                    info.DefiningType = baseInfo.DefiningType;
                    mergedExtensions[baseInfo.Index] = info;
                }
                else
                {
                    // this is a new field
                    info.Index        = mergedExtensions.Count;
                    info.DefiningType = this;
                    mergedExtensions.Add(info);
                }
            }

            if (mergedExtensions.Count > 0)
            {
                m_extensions     = mergedExtensions.ToArray();
                m_extensionIndex = new StringIndex(m_extensions);
            }
            else
            {
                m_extensions     = EmptyArray <ExtensionInfo> .Instance;
                m_extensionIndex = StringIndex.Empty;
            }

            foreach (ExtensionInfo extensionInfo in m_extensions)
            {
                // if this NodeType defines the extension, add an interface creator
                if (extensionInfo.DefiningType == this &&
                    typeof(IAdapter).IsAssignableFrom(extensionInfo.Type))
                {
                    AddCreator(new ExtensionAdapterCreator(extensionInfo));
                }
            }
        }
Esempio n. 15
0
        public void Contains_ReturnIfContain()
        {
            var existed    = "existed";
            var notExisted = "notExisted";

            using var index = new StringIndex <string>();
            index.Add(existed, Guid.NewGuid().ToString());

            Assert.True(index.Contains(existed));
            Assert.False(index.Contains(notExisted));
        }
Esempio n. 16
0
        /// <summary>
        /// Initialises a new instance of the PropertyMetadataTableRow class
        /// </summary>
        /// <param name="contents">The contents of the file</param>
        /// <param name="offset">The offset of this row</param>
        public PropertyMetadataTableRow(byte[] contents, Offset offset, IIndexDetails indexDetails)
        {
            FileOffset = offset;

            byte sizeOfBlobIndex   = indexDetails.GetSizeOfBlobIndex();
            byte sizeOfStringIndex = indexDetails.GetSizeOfStringIndex();

            _attributes = (PropertyAttributes)FieldReader.ToUInt16(contents, offset.Shift(2));
            _nameIndex  = new StringIndex(contents, sizeOfStringIndex, offset);
            _typeIndex  = FieldReader.ToUInt32(contents, offset.Shift(sizeOfBlobIndex), sizeOfBlobIndex);
        }
        /// <summary>
        /// Initialises a new instance of the FieldMetadataTableRow
        /// </summary>
        /// <param name="contents">The contents of the file</param>
        /// <param name="offset">The offset of the current row</param>
        public FieldMetadataTableRow(byte[] contents, Offset offset, IIndexDetails indexDetails)
        {
            this.FileOffset = offset;

            byte sizeOfStringIndex = indexDetails.GetSizeOfStringIndex();
            byte sizeOfBlobIndex   = indexDetails.GetSizeOfBlobIndex();

            _flags          = (FieldAttributes)FieldReader.ToUInt16(contents, offset.Shift(2));
            _nameIndex      = new StringIndex(contents, sizeOfStringIndex, offset);
            _signitureIndex = new BlobIndex(sizeOfBlobIndex, contents, Reflection.Signatures.Signatures.Field, offset);
        }
Esempio n. 18
0
        /// <summary>
        /// Initialises a new instance of the FileMetadataTableRow class
        /// </summary>
        /// <param name="contents">The contents of the file</param>
        /// <param name="offset">The offset of the current row</param>
        public FileMetadataTableRow(byte[] contents, Offset offset, IIndexDetails indexDetails)
        {
            this.FileOffset = offset;

            byte sizeOfStringIndex = indexDetails.GetSizeOfStringIndex();
            byte sizeOfBlobIndex   = indexDetails.GetSizeOfBlobIndex();

            _flags     = (FileAttributes)FieldReader.ToUInt32(contents, offset.Shift(4));
            _nameIndex = new StringIndex(contents, sizeOfStringIndex, offset);
            _hashValue = FieldReader.ToUInt32(contents, offset.Shift(sizeOfBlobIndex), sizeOfBlobIndex);
        }
        public void Test_FhirString_StringIndexSetter_NoAddress()
        {
            //Arrange
            var         FhirString = new FhirString();
            StringIndex Index      = new StringIndex();

            //Act
            Index = IndexSetterFactory.Create(typeof(StringIndex)).Set(FhirString, Index) as StringIndex;

            //Assert
            Assert.IsNull(Index);
        }
        public void Test_Markdown_StringIndexSetter_NoAddress()
        {
            //Arrange
            var         Markdown = new Markdown();
            StringIndex Index    = new StringIndex();

            //Act
            Index = IndexSetterFactory.Create(typeof(StringIndex)).Set(Markdown, Index) as StringIndex;

            //Assert
            Assert.IsNull(Index);
        }
        public void Test_Address_StringIndexSetter_Address_IsNull()
        {
            //Arrange
            var         Address = new Address();
            StringIndex Index   = null;

            //Act
            ActualValueDelegate <StringIndex> testDelegate = () => IndexSetterFactory.Create(typeof(StringIndex)).Set(Address, Index) as StringIndex;

            //Assert
            Assert.That(testDelegate, Throws.TypeOf <ArgumentNullException>());
        }
        public void Test_HumanName_StringIndexSetter_NoAddress()
        {
            //Arrange
            var         HumanName = new HumanName();
            StringIndex Index     = new StringIndex();

            //Act
            Index = IndexSetterFactory.Create(typeof(StringIndex)).Set(HumanName, Index) as StringIndex;

            //Assert
            Assert.IsNull(Index);
        }
        public void Test_Annotation_StringIndexSetter_NoAddress()
        {
            //Arrange
            var         Annotation = new Annotation();
            StringIndex Index      = new StringIndex();

            //Act
            Index = IndexSetterFactory.Create(typeof(StringIndex)).Set(Annotation, Index) as StringIndex;

            //Assert
            Assert.IsNull(Index);
        }
        /// <summary>
        /// Initialises a new instance of the TypeRefMetadataTableRow class
        /// </summary>
        /// <param name="contents">The file contents</param>
        /// <param name="offset">The offset for this entry</param>
        public TypeRefMetadataTableRow(byte[] contents, Offset offset, ICodedIndexResolver resolver, IIndexDetails indexDetails)
        {
            this.FileOffset = offset;

            int  sizeOfCodedIndex  = resolver.GetSizeOfIndex(CodedIndexes.ResolutionScope);
            byte sizeOfStringIndex = indexDetails.GetSizeOfStringIndex();

            _resolutionScope = resolver.Resolve(CodedIndexes.ResolutionScope,
                                                FieldReader.ToUInt32(contents, offset.Shift(sizeOfCodedIndex), sizeOfCodedIndex)
                                                );
            _nameIndex      = new StringIndex(contents, sizeOfStringIndex, offset);
            _namespaceIndex = new StringIndex(contents, sizeOfStringIndex, offset);
        }
        /// <summary>
        /// Initialises a new instance of the MemberRefMetadataTableRow
        /// </summary>
        /// <param name="contents">The contents of the file</param>
        /// <param name="offset">The offset of this row</param>
        public MemberRefMetadataTableRow(byte[] contents, Offset offset, ICodedIndexResolver resolver, IIndexDetails indexDetails)
        {
            this.FileOffset = offset;

            int  sizeOfMemberRefParentIndex = resolver.GetSizeOfIndex(CodedIndexes.MemberRefParent);
            byte sizeOfStringIndex          = indexDetails.GetSizeOfStringIndex();
            byte sizeOfBlobIndex            = indexDetails.GetSizeOfBlobIndex();

            _class = resolver.Resolve(CodedIndexes.MemberRefParent,
                                      FieldReader.ToUInt32(contents, offset.Shift(sizeOfMemberRefParentIndex), sizeOfMemberRefParentIndex)
                                      );
            _name      = new StringIndex(contents, sizeOfStringIndex, offset);
            _signiture = new BlobIndex(sizeOfBlobIndex, contents, Reflection.Signatures.Signatures.MethodDef, offset);
        }
        /// <summary>
        /// Initialises a new instance of the GenericParamMetadataTableRow class
        /// </summary>
        /// <param name="contents">The contents of the file</param>
        /// <param name="offset">The offset of the current row</param>
        public GenericParamMetadataTableRow(byte[] contents, Offset offset, ICodedIndexResolver resolver, IIndexDetails indexDetails)
        {
            this.FileOffset = offset;

            int  sizeOfCodeIndex   = resolver.GetSizeOfIndex(CodedIndexes.TypeOrMethodDef);
            byte sizeOfStringIndex = indexDetails.GetSizeOfStringIndex();

            _number     = FieldReader.ToUInt16(contents, offset.Shift(2));
            _flags      = (GenericParamAttributes)FieldReader.ToUInt16(contents, offset.Shift(2));
            _ownerIndex = resolver.Resolve(CodedIndexes.TypeOrMethodDef,
                                           FieldReader.ToUInt32(contents, offset.Shift(sizeOfCodeIndex), sizeOfCodeIndex)
                                           );
            _nameIndex = new StringIndex(contents, sizeOfStringIndex, offset);
        }
    public void AddAndSearchValues()
    {
        var si = new StringIndex();

        si.Add("abcdef", "1");
        si.Add("abcdeff", "2");
        si.Add("abcdeffg", "3");
        si.Add("bcdef", "4");
        si.Add("bcdefg", "5");
        si.Add("cdefg", "6");
        si.Add("cdefgh", "7");
        var output = si.GetValuesByPrefixFlattened("abc");

        Assert.IsTrue(output.Contains("1") && output.Contains("2") && output.Contains("3"));
    }
Esempio n. 28
0
        /// <summary>
        /// Initialises a new instance of the ImplMapMetadataTableRow class
        /// </summary>
        /// <param name="content">The content of the file</param>
        /// <param name="offset">The offset of the current row</param>
        public ImplMapMetadataTableRow(byte[] content, Offset offset, ICodedIndexResolver resolver, IIndexDetails indexDetails)
        {
            this.FileOffset = offset;

            int  sizeOfMemberForwardedIndex = resolver.GetSizeOfIndex(CodedIndexes.MemberForwarded);
            byte sizeOfStringIndex          = indexDetails.GetSizeOfStringIndex();
            byte sizeOfModuleRefIndex       = indexDetails.GetSizeOfIndex(MetadataTables.ModuleRef);

            _mappingFlags  = (PInvokeAttributes)FieldReader.ToUInt16(content, offset.Shift(2));
            _memberForward = resolver.Resolve(CodedIndexes.MemberForwarded,
                                              FieldReader.ToUInt32(content, offset.Shift(sizeOfMemberForwardedIndex), sizeOfMemberForwardedIndex)
                                              );
            _importName  = new StringIndex(content, sizeOfStringIndex, offset);
            _importScope = new Index(content, offset, sizeOfModuleRefIndex);
        }
Esempio n. 29
0
        /// <summary>
        /// Initialises a new instance of the MethodMetadataTableRow class
        /// </summary>
        /// <param name="contents">The contents of the file</param>
        /// <param name="offset">The offset of the current row</param>
        public MethodMetadataTableRow(byte[] contents, Offset offset, IIndexDetails indexDetails)
        {
            this.FileOffset = offset;

            byte sizeOfStringIndex = indexDetails.GetSizeOfStringIndex();
            byte sizeOfBlobIndex   = indexDetails.GetSizeOfBlobIndex();
            byte sizeOfParamIndex  = indexDetails.GetSizeOfIndex(MetadataTables.Param);

            _rva       = FieldReader.ToUInt32(contents, offset.Shift(4));
            _implFlags = (MethodImplFlags)FieldReader.ToUInt16(contents, offset.Shift(2));
            _flags     = (MethodAttributes)FieldReader.ToUInt16(contents, offset.Shift(2));
            _name      = new StringIndex(contents, sizeOfStringIndex, offset);
            _signiture = new BlobIndex(sizeOfBlobIndex, contents, Signatures.Signatures.MethodDef, offset);
            _paramList = new Index(contents, offset, sizeOfParamIndex);
        }
Esempio n. 30
0
        public async Task RemoveMultiple_GetByQuery_NotContainsRemoved(int tasksCount)
        {
            var skipTake = 3;

            using var index = new StringIndex <string>();
            var inputs = new Dictionary <string, IEnumerable <string> >();

            for (var i = 0; i < tasksCount; i++)
            {
                inputs[Guid.NewGuid().ToString()] = new []
                {
                    Guid.NewGuid().ToString(), Guid.NewGuid().ToString(), Guid.NewGuid().ToString(),
                                               Guid.NewGuid().ToString(), Guid.NewGuid().ToString(), Guid.NewGuid().ToString()
                }
            }
            ;

            var tasks = new List <Task>();

            foreach (var(q, input) in inputs)
            {
                tasks.Add(Task.Run(() => index.Add(q, input)));
            }

            await Task.WhenAll(tasks);

            var removeTasks = new List <Task>();

            foreach (var(q, input) in inputs)
            {
                removeTasks.Add(Task.Run(() => index.Remove(q, input.Take(skipTake))));
            }

            await Task.WhenAll(removeTasks);

            var getTasks = inputs.Keys.Select(q => Task.Run(() => new { Query = q, Result = index.Get(q) })).ToList();

            await Task.WhenAll(getTasks);

            foreach (var task in getTasks)
            {
                var(query, result) = (task.Result.Query, task.Result.Result);
                var input = inputs[query].ToList();
                Assert.All(input.Skip(skipTake), x => Assert.Contains(x, result));
                Assert.All(input.Take(skipTake), x => Assert.DoesNotContain(x, result));
                Assert.Equal(input.Count - skipTake, result.Count);
            }
        }
Esempio n. 31
0
 ////////////////////////////////////////////////////////////////////////////
 //--------------------------------- REVISIONS ------------------------------
 // Date       Name                 Tracking #         Description
 // ---------  -------------------  -------------      ----------------------
 // 21JUN2009  James Shen                 	          Initial Creation
 ////////////////////////////////////////////////////////////////////////////
 /**
  * constructor.
  */
 public TabularData(BinaryReader reader, long offset, long size,
         DataField[] fields, StringData stringData, StringIndex stringIndex)
     : base(reader, offset, size)
 {
     this._fields = fields;
     this._stringData = stringData;
     this._stringIndex = stringIndex;
     int numberOfField = fields.Length;
     _recordSize = 0;
     for (int i = 0; i < numberOfField; i++)
     {
         switch (fields[i].GetFieldType())
         {
             case DataField.TYPE_CHAR://char
                 _recordSize += 4;
                 break;
             case DataField.TYPE_INTEGER://int
                 _recordSize += 4;
                 break;
             case DataField.TYPE_SMALLINT://shot
                 _recordSize += 2;
                 break;
             case DataField.TYPE_FLOAT://float
                 _recordSize += 8;
                 break;
             case DataField.TYPE_DECIMAL://float
                 _recordSize += 8;
                 break;
             case DataField.TYPE_DATE://date
                 _recordSize += 4;
                 break;
             case DataField.TYPE_LOGICAL://bool
                 _recordSize += 1;
                 break;
         }
     }
 }
Esempio n. 32
0
        private static object DecodeEntry(BinaryReader reader, StringIndex index)
        {
            Stream stream = reader.BaseStream;
            long origin = stream.Position;
            reader.ReadBytes(8 * (int)index);
            int dataoffset = reader.ReadInt32();
            int datatype = reader.ReadInt32();
            stream.Position = origin;

            reader.ReadBytes(dataoffset);

            switch (datatype)
            {
                case 0:
                    reader.ReadBytes(0x18);
                    long dataorigin = stream.Position;
                    int length;

                    while (stream.Position != stream.Length && reader.ReadByte() != 0)
                    {
                    }

                    length = (int)(stream.Position - dataorigin) - 1;
                    stream.Position = dataorigin;

                    var res = ShiftJISFF11Encoding.ShiftJISFF11.GetString(reader.ReadBytes(length), 0, length);
                    stream.Position = origin;
                    return res;

                case 1:
                    return reader.ReadInt32();
            }

            return null;
        }
Esempio n. 33
0
        ////////////////////////////////////////////////////////////////////////////
        //--------------------------------- REVISIONS ------------------------------
        // Date       Name                 Tracking #         Description
        // ---------  -------------------  -------------      ----------------------
        // 21JUN2009  James Shen                 	          Initial Creation
        ////////////////////////////////////////////////////////////////////////////
        /**
         * Open the map file.
         */
        public void Open()
        {
            if (Header != null)
            {
                return;
            }

            Header = new Header(_reader, 0, 0);
            _recordIndex = new RecordIndex(_reader, Header.IndexOffset,
                    Header.IndexLength);
            _stringIndex = new StringIndex(_reader, Header.StringIndexOffset,
                    Header.StringIndexLength);
            _stringData = new StringData(_reader, Header.StringDataOffset,
                    Header.StringDataLength);
            _geoData = new GeoData(_reader, Header.GeoDataOffset,
                    Header.GeoDataLength);
            TabularData = new TabularData(_reader, Header.TabularDataOffset,
                    Header.TabularDataLength, Header.Fields,
                    _stringData, _stringIndex);
            _rtreeIndex = new RTreeIndex(_reader, Header.RtreeIndexOffset,
                    Header.RtreeIndexLength);
            _tree = new RTree.RTree(_rtreeIndex.File);
        }