internal ReturnCode init(IntPtr uParticipant, SchedulingQosPolicy scheduling)
        {
            ReturnCode result = DDS.ReturnCode.Ok;

            Debug.Assert(uParticipant != IntPtr.Zero);

            this.SchedulingPolicy = scheduling;
            this.StackSize        = DDS.OpenSplice.Common.ListenerDispatcher.StackSize(uParticipant);

            IntPtr uListener = User.Listener.New(uParticipant);

            if (uListener == IntPtr.Zero)
            {
                result = DDS.ReturnCode.OutOfResources;
            }
            else
            {
                base.init(uListener, false);
            }

            if (result != DDS.ReturnCode.Ok)
            {
                deinit();
            }

            return(result);
        }
        private static ThreadPriority SchedulingPriority(SchedulingQosPolicy SchedulingPolicy)
        {
            int Priority = (int)ThreadPriority.Normal;

            if (SchedulingPolicy.SchedulingClass.Kind !=
                DDS.SchedulingClassQosPolicyKind.ScheduleDefault)
            {
                Priority = SchedulingPolicy.SchedulingPriority;
                if (SchedulingPolicy.SchedulingPriorityKind.Kind ==
                    DDS.SchedulingPriorityQosPolicyKind.PriorityRelative)
                {
                    Priority = (int)Thread.CurrentThread.Priority;
                }

                if (Priority < (int)ThreadPriority.Lowest)
                {
                    Priority = (int)ThreadPriority.Lowest;
                }
                else if (Priority > (int)ThreadPriority.Highest)
                {
                    Priority = (int)ThreadPriority.Highest;
                }
            }

            return((ThreadPriority)Priority);
        }
        internal ReturnCode SetScheduling(SchedulingQosPolicy SchedulingPolicy)
        {
            ReturnCode          result = DDS.ReturnCode.Ok;
            ThreadPriority      Priority, _Priority;
            SchedulingQosPolicy _SchedulingPolicy;

            lock (this)
            {
                Priority              = SchedulingPriority(SchedulingPolicy);
                _Priority             = SchedulingPriority(this.SchedulingPolicy);
                _SchedulingPolicy     = this.SchedulingPolicy;
                this.SchedulingPolicy = SchedulingPolicy;
                if (Priority != _Priority)
                {
                    result = Stop();
                    if (result == DDS.ReturnCode.Ok &&
                        State != ListenerThreadState.STOPPED)
                    {
                        result = DDS.ReturnCode.PreconditionNotMet;
                    }
                    else if (Observables.Count > 0)
                    {
                        result = Start();
                    }
                    if (result != DDS.ReturnCode.Ok)
                    {
                        this.SchedulingPolicy = _SchedulingPolicy;
                    }
                }
            }

            return(result);
        }
        internal ReturnCode GetScheduling(ref SchedulingQosPolicy SchedulingPolicy)
        {
            lock (this)
            {
                SchedulingPolicy = this.SchedulingPolicy;
            }

            return(DDS.ReturnCode.Ok);
        }
        internal static void CopyOut(v_schedulePolicyI_s from, ref SchedulingQosPolicy to)
        {
            if (to == null)
            {
                to = new SchedulingQosPolicy();
            }

            // Get scheduling_class field
            to.SchedulingClass.Kind = (SchedulingClassQosPolicyKind)from.v.kind;

            // Get scheduling_priority_kind field
            to.SchedulingPriorityKind.Kind = (SchedulingPriorityQosPolicyKind)from.v.priorityKind;

            // Get scheduling_priority field
            to.SchedulingPriority = from.v.priority;
        }
        internal static int countErrors(SchedulingQosPolicy o)
        {
            int errorCount = 0;

            if (o.SchedulingClass == null ||
                o.SchedulingClass.Kind > SchedulingClassQosPolicyKind.ScheduleRealtime)
            {
                errorCount++;
            }
            if (o.SchedulingPriorityKind == null ||
                o.SchedulingPriorityKind.Kind > SchedulingPriorityQosPolicyKind.PriorityAbsolute)
            {
                errorCount++;
            }

            return(errorCount);
        }
        internal static DDS.ReturnCode CopyIn(SchedulingQosPolicy from, ref v_schedulePolicyI_s to)
        {
            DDS.ReturnCode result = DDS.ReturnCode.Ok;
            if (from != null)
            {
                // Set scheduling_class field
                to.v.kind = (V_SCHEDULEKIND)from.SchedulingClass.Kind;

                // Set scheduling_priority_kind field
                to.v.priorityKind = (V_SCHEDULEPRIORITYKIND)from.SchedulingPriorityKind.Kind;

                // Set scheduling_priority field
                to.v.priority = from.SchedulingPriority;
            }
            else
            {
                result = DDS.ReturnCode.BadParameter;
                ReportStack.Report(result, "SchedulingQosPolicy attribute may not be a null pointer.");
            }
            return(result);
        }
        internal static void CopyOut(IntPtr from, ref SchedulingQosPolicy to, int offset)
        {
        	if (to == null) to = new SchedulingQosPolicy();
        	
            // Get scheduling_class field
            to.SchedulingClass.Kind = (SchedulingClassQosPolicyKind)
                BaseMarshaler.ReadInt32(from, offset + offset_scheduling_class);

            // Get scheduling_priority_kind field
            to.SchedulingPriorityKind.Kind = (SchedulingPriorityQosPolicyKind)
                BaseMarshaler.ReadInt32(from, offset + offset_scheduling_priority_kind);

            // Get scheduling_priority field
            to.SchedulingPriority = BaseMarshaler.ReadInt32(from, offset + offset_scheduling_priority);
        }
 internal void CopyOut(ref SchedulingQosPolicy to)
 {
     CopyOut(GapiPtr, ref to, 0);
 }
        internal static DDS.ReturnCode CopyIn(SchedulingQosPolicy from, IntPtr to, int offset)
        {
            DDS.ReturnCode result = DDS.ReturnCode.Ok;
            if (from != null) {
                // Set scheduling_class field
                BaseMarshaler.Write(to, offset + offset_scheduling_class, (int)from.SchedulingClass.Kind);

                // Set scheduling_priority_kind field
                BaseMarshaler.Write(to, offset + offset_scheduling_priority_kind, (int)from.SchedulingPriorityKind.Kind);

                // Set scheduling_priority field
                BaseMarshaler.Write(to, offset + offset_scheduling_priority, from.SchedulingPriority);
            } else {
                result = DDS.ReturnCode.BadParameter;
                DDS.OpenSplice.OS.Report(
                        DDS.OpenSplice.ReportType.OS_ERROR,
                        "DDS.OpenSplice.CustomMarshalers.SchedulingQosPolicyMarshaler.CopyIn",
                        "DDS/OpenSplice/CustomMarshalers/QosContainedMarshalers.cs",
                        DDS.ErrorCode.InvalidValue,
                        "SchedulingQosPolicy attribute may not be a null pointer.");
            }
            return result; 
        }
 internal DDS.ReturnCode CopyIn(SchedulingQosPolicy from)
 {
     cleanupRequired = true;
     return CopyIn(from, GapiPtr, 0);
 }