Lucene.Net.Index.IndexWriterConfig.Clone C# (CSharp) Method

Clone() public method

public Clone ( ) : object
return object
        public object Clone()
        {
            try
            {
                IndexWriterConfig clone = (IndexWriterConfig)this.MemberwiseClone();

                clone.Writer = (SetOnce<IndexWriter>)Writer.Clone();

                // Mostly shallow clone, but do a deepish clone of
                // certain objects that have state that cannot be shared
                // across IW instances:
                clone.delPolicy = (IndexDeletionPolicy)delPolicy.Clone();
                clone.flushPolicy = (FlushPolicy)flushPolicy.Clone();
                clone.indexerThreadPool = (DocumentsWriterPerThreadPool)indexerThreadPool.Clone();
                // we clone the infoStream because some impls might have state variables
                // such as line numbers, message throughput, ...
                clone.infoStream = (InfoStream)infoStream.Clone();
                clone.mergePolicy = (MergePolicy)mergePolicy.Clone();
                clone.mergeScheduler = (MergeScheduler)mergeScheduler.Clone();

                return clone;
            }
            catch
            {
                // .NET port: no need to deal with checked exceptions here
                throw;
            }
        }

Usage Example

        public virtual void TestClone()
        {
            IndexWriterConfig conf = new IndexWriterConfig(TEST_VERSION_CURRENT, new MockAnalyzer(Random()));
            IndexWriterConfig clone = (IndexWriterConfig)conf.Clone();

            // Make sure parameters that can't be reused are cloned
            IndexDeletionPolicy delPolicy = conf.DelPolicy;
            IndexDeletionPolicy delPolicyClone = clone.DelPolicy;
            Assert.IsTrue(delPolicy.GetType() == delPolicyClone.GetType() && (delPolicy != delPolicyClone || delPolicy.Clone() == delPolicyClone.Clone()));

            FlushPolicy flushPolicy = conf.FlushPolicy;
            FlushPolicy flushPolicyClone = clone.FlushPolicy;
            Assert.IsTrue(flushPolicy.GetType() == flushPolicyClone.GetType() && (flushPolicy != flushPolicyClone || flushPolicy.Clone() == flushPolicyClone.Clone()));

            DocumentsWriterPerThreadPool pool = conf.IndexerThreadPool;
            DocumentsWriterPerThreadPool poolClone = clone.IndexerThreadPool;
            Assert.IsTrue(pool.GetType() == poolClone.GetType() && (pool != poolClone || pool.Clone() == poolClone.Clone()));

            MergePolicy mergePolicy = conf.MergePolicy;
            MergePolicy mergePolicyClone = clone.MergePolicy;
            Assert.IsTrue(mergePolicy.GetType() == mergePolicyClone.GetType() && (mergePolicy != mergePolicyClone || mergePolicy.Clone() == mergePolicyClone.Clone()));

            MergeScheduler mergeSched = conf.MergeScheduler;
            MergeScheduler mergeSchedClone = clone.MergeScheduler;
            Assert.IsTrue(mergeSched.GetType() == mergeSchedClone.GetType() && (mergeSched != mergeSchedClone || mergeSched.Clone() == mergeSchedClone.Clone()));

            conf.SetMergeScheduler(new SerialMergeScheduler());
            Assert.AreEqual(typeof(ConcurrentMergeScheduler), clone.MergeScheduler.GetType());
        }
All Usage Examples Of Lucene.Net.Index.IndexWriterConfig::Clone