internal void ReferenceBucketFromTarget(PredictionTreeDFAContext context, ProductionRuleLookAheadBucket bucket)
 {
     if (this.referencedBuckets == null)
     {
         this.referencedBuckets = new Dictionary <ProductionRuleLookAheadBucket, PredictionTreeDFAContext>();
     }
     if (!this.referencedBuckets.ContainsKey(bucket))
     {
         this.referencedBuckets.Add(bucket, context);
     }
 }
        internal void DefineBucketOnTarget(PredictionTreeDFAContext bucketReferencer)
        {
            if (this.locallyDefinedBuckets == null)
            {
                this.locallyDefinedBuckets = new Dictionary <ProductionRuleLookAheadBucket, List <PredictionTreeDFAContext> >();
            }
            var bucket = this.RootAdapter.AssociatedContext.CreateBucket(this);
            List <PredictionTreeDFAContext> sourcesWhichUseBucket;

            if (!this.locallyDefinedBuckets.TryGetValue(bucket, out sourcesWhichUseBucket))
            {
                this.locallyDefinedBuckets.Add(bucket, sourcesWhichUseBucket = new List <PredictionTreeDFAContext>());
            }
            if (!sourcesWhichUseBucket.Contains(bucketReferencer))
            {
                sourcesWhichUseBucket.Add(bucketReferencer);
            }
            bucketReferencer.ReferenceBucketFromTarget(this, bucket);
        }
        internal ProductionRuleLookAheadBucket CreateBucket(PredictionTreeDFAContext bucketOwner)
        {
            if (this.automationBuckets == null)
            {
                this.automationBuckets = new Dictionary <PredictionTreeDFAContext, ProductionRuleLookAheadBucket>();
            }
            ProductionRuleLookAheadBucket result;

            if (!this.automationBuckets.TryGetValue(bucketOwner, out result))
            {
                this.automationBuckets.Add(bucketOwner, result = new ProductionRuleLookAheadBucket()
                {
                    Owner = bucketOwner, BucketID = this.automationBuckets.Count + 1
                });
            }
            if (!bucketUseCount.ContainsKey(result))
            {
                bucketUseCount.Add(result, 0);
            }
            bucketUseCount[result]++;
            return(result);
        }