Пример #1
0
 public void Initialize()
 {
     _partitionUtilX = new PartitionUtil(_countX, _lengthX);
     _partitionUtilY = new PartitionUtil(_countY, _lengthY);
     BuildAll();
     BuildByX();
     BuildByY();
 }
Пример #2
0
        /// <returns>null if eval invalid type</returns>
        private static int?Calculate(object eval,
                                     PartitionUtil partitionUtil,
                                     int keyType,
                                     int hashSliceStart,
                                     int hashSliceEnd)
        {
            if (eval == ExpressionConstants.Unevaluatable || eval == null)
            {
                return(null);
            }

            switch (keyType)
            {
            case PartitionKeyTypeLong:
            {
                long longVal;
                if (eval is Number)
                {
                    longVal = (long)(Number)eval;
                }
                else if (eval is string)
                {
                    longVal = long.Parse((string)eval);
                }
                else
                {
                    throw new ArgumentException("unsupported data type for partition key: " + eval.GetType());
                }

                return(partitionUtil.Partition(longVal));
            }

            case PartitionKeyTypeString:
            {
                var key   = eval.ToString();
                var start = hashSliceStart >= 0 ? hashSliceStart : key.Length + hashSliceStart;
                var end   = hashSliceEnd > 0 ? hashSliceEnd : key.Length + hashSliceEnd;
                var hash  = StringUtil.Hash(key, start, end);
                return(partitionUtil.Partition(hash));
            }

            default:
            {
                throw new ArgumentException("unsupported partition key type: " + keyType);
            }
            }
        }
Пример #3
0
 public override void Init()
 {
     PartitionUtil = new PartitionUtil(Count, Length);
 }