public ObjectArrayEventBeanCopyMethodWithArrayMapForge(
            ObjectArrayEventType eventType,
            ISet<string> mapPropertiesToCopy,
            ISet<string> arrayPropertiesToCopy,
            IDictionary<string, int> propertiesIndexes)
        {
            this.eventType = eventType;

            ISet<int> mapIndexesToCopy = new HashSet<int>();
            foreach (var prop in mapPropertiesToCopy) {
                if (propertiesIndexes.TryGetValue(prop, out var index)) {
                    mapIndexesToCopy.Add(index);
                }
            }

            mapIndexes = IntArrayUtil.ToArray(mapIndexesToCopy);

            ISet<int> arrayIndexesToCopy = new HashSet<int>();
            foreach (var prop in arrayPropertiesToCopy) {
                if (propertiesIndexes.TryGetValue(prop, out var index)) {
                    arrayIndexesToCopy.Add(index);
                }
            }

            arrayIndexes = IntArrayUtil.ToArray(arrayIndexesToCopy);
        }
Exemple #2
0
        public IntSeqKey RemoveFromEnd()
        {
            if (Array.Length > 7) {
                return new IntSeqKeyMany(IntArrayUtil.GetParentPath(Array));
            }

            return new IntSeqKeySix(Array[0], Array[1], Array[2], Array[3], Array[4], Array[5]);
        }
Exemple #3
0
        public bool IsParentTo(IntSeqKey other)
        {
            if (!(other is IntSeqKeyMany)) {
                return false;
            }

            return IntArrayUtil.CompareParentKey(((IntSeqKeyMany) other).Array, Array);
        }
        public CodegenExpression Make(
            CodegenMethodScope parent,
            SAIFFInitializeSymbol symbols,
            CodegenClassScope classScope)
        {
            var methodNode = parent.MakeChild(typeof(SubordTableLookupStrategyFactory), GetType(), classScope);
            if (_isStrictKeys) {
                int[] keyStreamNums = IntArrayUtil.Copy(_keyStreamNumbers);
                var keyStreamTypes = _outerStreamTypesZeroIndexed;
                if (isNWOnTrigger) {
                    keyStreamTypes = EventTypeUtility.ShiftRight(_outerStreamTypesZeroIndexed);
                    for (var i = 0; i < keyStreamNums.Length; i++) {
                        keyStreamNums[i] = keyStreamNums[i] + 1;
                    }
                }

                var forges = ExprNodeUtilityQuery.ForgesForProperties(
                    keyStreamTypes, _hashStrictKeys, keyStreamNums);
                var eval = MultiKeyCodegen.CodegenExprEvaluatorMayMultikey(
                    forges,
                    _hashKeyCoercionTypes.CoercionTypes,
                    _hashMultikeyClasses,
                    methodNode,
                    classScope);

                methodNode.Block.MethodReturn(
                    NewInstance<SubordHashedTableLookupStrategyPropFactory>(
                        Constant(_hashStrictKeys),
                        Constant(keyStreamNums),
                        eval));
                return LocalMethod(methodNode);
            }
            else {
                var forges = new ExprForge[_hashKeys.Count];
                for (var i = 0; i < _hashKeys.Count; i++) {
                    forges[i] = _hashKeys[i].HashKey.KeyExpr.Forge;
                }

                var expressions = ExprNodeUtilityPrint.ToExpressionStringsMinPrecedence(forges);
                var eval = MultiKeyCodegen.CodegenExprEvaluatorMayMultikey(
                    forges,
                    _hashKeyCoercionTypes.CoercionTypes,
                    _hashMultikeyClasses,
                    methodNode,
                    classScope);
                
                methodNode.Block.MethodReturn(
                    NewInstance<SubordHashedTableLookupStrategyExprFactory>(
                        Constant(expressions),
                        eval,
                        Constant(isNWOnTrigger),
                        Constant(_numStreamsOuter)));
                return LocalMethod(methodNode);
            }
        }
Exemple #5
0
 public IntSeqKey AddToEnd(int num)
 {
     return new IntSeqKeyMany(IntArrayUtil.Append(Array, num));
 }