internal virtual ReturnCode Take(IntPtr sampleList)
        {
            uint mask = DataReader.StateMask(sampleState, viewState, instanceState);

            return(SacsSuperClass.uResultToReturnCode(
                       User.Reader.Take(
                           dataReader.rlReq_UserPeer,
                           mask,
                           Common.SampleList.ReaderAction,
                           sampleList, DDS.Duration.Zero.OsDuration)));
        }
        public ReturnCode GetDataReaders(
            ref IDataReader[] readers,
            SampleStateKind sampleStates,
            ViewStateKind viewStates,
            InstanceStateKind instanceStates)
        {
            ReturnCode result = DDS.ReturnCode.AlreadyDeleted;

            ReportStack.Start();
            if (this.rlReq_isAlive)
            {
                IntPtr iterp = IntPtr.Zero;
                uint   mask  = DataReader.StateMask(sampleStates, viewStates, instanceStates);

                result = uResultToReturnCode(User.Subscriber.GetDataReaders(this.rlReq_UserPeer, mask, ref iterp));
                if (result == ReturnCode.Ok)
                {
                    int length = Database.c.iterLength(iterp);
                    if (readers == null || readers.Length != length)
                    {
                        readers = new IDataReader[length];
                    }
                    for (int i = 0; i < length; i++)
                    {
                        IntPtr ureader = Database.c.iterTakeFirst(iterp);

                        readers [i] = SacsSuperClass.fromUserData(ureader) as IDataReader;
                    }
                    Database.c.iterFree(iterp);
                }
            }

            ReportStack.Flush(this, result != ReturnCode.Ok);

            return(result);
        }