internal ReturnCode CheckReaderPreConditions(
            T[] data,
            SampleInfo[] sampleInfos,
            int maxSamples,
            SampleStateKind sampleStates,
            ViewStateKind viewStates,
            InstanceStateKind instanceStates)
        {
            ReturnCode result;

            if (maxSamples >= Length.Unlimited)
            {
                if (DataReader.SampleStateMaskIsValid(sampleStates) &&
                    DataReader.ViewStateMaskIsValid(viewStates) &&
                    DataReader.InstanceStateMaskIsValid(instanceStates))
                {
                    if ((data == null && sampleInfos == null) ||
                        (data != null && sampleInfos != null && data.Length == sampleInfos.Length))
                    {
                        if (data == null || data.Length == 0 ||
                            maxSamples == DDS.Length.Unlimited || data.Length >= maxSamples)
                        {
                            result = DDS.ReturnCode.Ok;
                        }
                        else
                        {
                            result = DDS.ReturnCode.PreconditionNotMet;
                        }
                    }
                    else
                    {
                        result = DDS.ReturnCode.PreconditionNotMet;
                    }
                }
                else
                {
                    result = DDS.ReturnCode.BadParameter;
                }
            }
            else
            {
                result = DDS.ReturnCode.BadParameter;
            }
            return(result);
        }