Cancel
Deviation (functional) SKMain-498
1 vote

DeviceStateControllerType.Nothing ska vara = 0

Created by Tomas Wennerberg on 8/1/2012 10:11 PM Last Updated by Martin Videfors on 8/28/2012 10:50 PM
%
 hrs
Logged: 0  hrs

 Description

Enum för DeviceStateControllerType.Nothing är nu lika med -1. Det går då inte initiera StateController till Nothing och OR:a in bitarna efter det. Jag tror att Nothing behöver ha värdet 0 för att det ska funka.

Följande kod funkar alltså inte som det är nu (men bör funka om Nothing = 0):

_device.StateControllers = DeviceStateControllerType.Nothing;
                        if (chkStateControllerSchedule.Checked)
                            _device.StateControllers |= DeviceStateControllerType.Schedule;
                        if (chkStateControllerScenario.Checked)
                            _device.StateControllers |= DeviceStateControllerType.Scenario;
                        if (chkStateControllerManually.Checked)
                            _device.StateControllers |= DeviceStateControllerType.ManualReq;

Server 3.0.0.1.

 Comments (3)  Attachments (0)  History (4)  Notifications (3)  Sub Issues (0)  Parent Issues (0)  Related Issues (0)  Revisions (0)  Time Tracking (0)

    Tomas Wennerberg (Wednesday, August 01, 2012 10:30 PM) #

OK, initierar till All istället då och kör sedan XOR för att plocka bort bitar som inte ska vara satta:

_device.StateControllers = DeviceStateControllerType.All;
                        if (!chkStateControllerSchedule.Checked)
                            _device.StateControllers ^= DeviceStateControllerType.Schedule;
                        if (!chkStateControllerScenario.Checked)
                            _device.StateControllers ^= DeviceStateControllerType.Scenario;
                        if (!chkStateControllerManually.Checked)
                            _device.StateControllers ^= DeviceStateControllerType.ManualReq;

    Martin Videfors (Wednesday, August 01, 2012 10:18 PM) #

Flaggar detta som Rejected eftersom det isf bör omformuleras till en CR.

    Martin Videfors (Wednesday, August 01, 2012 10:17 PM) #

Man brukar sätta ett explicit värde till -1 om det är just uteslutande, även i en Flags-enumeration.

Eftersom default-värdet för en enum är "0" är "0" default-värdet (om man inte satt något StateController-värde) satt till att motsvara att allt ska kunna kontrollera en enhet.

Koden för Device-entiteten ser därför ut så här:

public bool CanBeControlledBy(DeviceStateControllerType type)
        {
            if (StateControllers == DeviceStateControllerType.Nothing)
                return false;

            return (StateControllers & type) == type;
        }

 

Du bör kunna använda denna även på klientsidan.