public void CloneState()
 {
     if (Interlocked.Increment(ref _parent.StateRefCount) > 1)
     {
         State = (SrCnnStateBase)_parent.StateRef.Clone();
     }
 }
            public Mapper(IHostEnvironment env, SrCnnTransformBase <TInput, TState> parent, DataViewSchema inputSchema)
            {
                Contracts.CheckValue(env, nameof(env));
                _host = env.Register(nameof(Mapper));
                _host.CheckValue(inputSchema, nameof(inputSchema));
                _host.CheckValue(parent, nameof(parent));

                if (!inputSchema.TryGetColumnIndex(parent.InputColumnName, out _inputColumnIndex))
                {
                    throw _host.ExceptSchemaMismatch(nameof(inputSchema), "input", parent.InputColumnName);
                }

                var colType = inputSchema[_inputColumnIndex].Type;

                if (colType != NumberDataViewType.Single)
                {
                    throw _host.ExceptSchemaMismatch(nameof(inputSchema), "input", parent.InputColumnName, "Single", colType.ToString());
                }

                _parent       = parent;
                _parentSchema = inputSchema;
                _slotNames    = new VBuffer <ReadOnlyMemory <char> >(_parent.OutputLength, new[] { "Alert".AsMemory(), "Raw Score".AsMemory(),
                                                                                                   "Mag".AsMemory() });

                State = (SrCnnStateBase)_parent.StateRef;
            }
            private Action <long> MakePinger(DataViewRow input, SrCnnStateBase state)
            {
                _host.AssertValue(input);
                var           srcGetter = input.GetGetter <TInput>(input.Schema[_inputColumnIndex]);
                Action <long> pinger    = (long rowPosition) =>
                {
                    TInput src = default;
                    srcGetter(ref src);
                    state.UpdateState(ref src, rowPosition, _parent.WindowSize > 0);
                };

                return(pinger);
            }
            private Delegate MakeGetter(DataViewRow input, SrCnnStateBase state)
            {
                _host.AssertValue(input);
                var         srcGetter   = input.GetGetter <TInput>(input.Schema[_inputColumnIndex]);
                ProcessData processData = _parent.WindowSize > 0 ?
                                          (ProcessData)state.Process : state.ProcessWithoutBuffer;

                ValueGetter <VBuffer <double> > valueGetter = (ref VBuffer <double> dst) =>
                {
                    TInput src = default;
                    srcGetter(ref src);
                    processData(ref src, ref dst);
                };

                return(valueGetter);
            }
            private Action <PingerArgument> MakePinger(DataViewRow input, SrCnnStateBase state)
            {
                _host.AssertValue(input);
                var srcGetter = input.GetGetter <TInput>(input.Schema[_inputColumnIndex]);
                Action <PingerArgument> pinger = (PingerArgument args) =>
                {
                    if (args.DontConsumeSource)
                    {
                        return;
                    }

                    TInput src = default;
                    srcGetter(ref src);
                    state.UpdateState(ref src, args.RowPosition, _parent.WindowSize > 0);
                };

                return(pinger);
            }