1f25ce65dSSergey Makeev // The MIT License (MIT) 2f25ce65dSSergey Makeev // 3f25ce65dSSergey Makeev // Copyright (c) 2015 Sergey Makeev, Vadim Slyusarev 4f25ce65dSSergey Makeev // 5f25ce65dSSergey Makeev // Permission is hereby granted, free of charge, to any person obtaining a copy 6f25ce65dSSergey Makeev // of this software and associated documentation files (the "Software"), to deal 7f25ce65dSSergey Makeev // in the Software without restriction, including without limitation the rights 8f25ce65dSSergey Makeev // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9f25ce65dSSergey Makeev // copies of the Software, and to permit persons to whom the Software is 10f25ce65dSSergey Makeev // furnished to do so, subject to the following conditions: 11f25ce65dSSergey Makeev // 12f25ce65dSSergey Makeev // The above copyright notice and this permission notice shall be included in 13f25ce65dSSergey Makeev // all copies or substantial portions of the Software. 14f25ce65dSSergey Makeev // 15f25ce65dSSergey Makeev // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16f25ce65dSSergey Makeev // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17f25ce65dSSergey Makeev // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18f25ce65dSSergey Makeev // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19f25ce65dSSergey Makeev // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20f25ce65dSSergey Makeev // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 21f25ce65dSSergey Makeev // THE SOFTWARE. 22f25ce65dSSergey Makeev 2358964d0bSSergey Makeev #pragma once 2458964d0bSSergey Makeev 2558964d0bSSergey Makeev 2658964d0bSSergey Makeev namespace MT 2758964d0bSSergey Makeev { 28806ef292SSergey Makeev //Task group ID 29754cb997SSergey Makeev class TaskGroup 30754cb997SSergey Makeev { 31*2e846c40SSergey Makeev int16 id; 3231bebe6fSSergey Makeev 33754cb997SSergey Makeev public: 34754cb997SSergey Makeev 35*2e846c40SSergey Makeev static const int16 MT_MAX_GROUPS_COUNT = 256; 36754cb997SSergey Makeev 37754cb997SSergey Makeev enum PredefinedValues 38754cb997SSergey Makeev { 39754cb997SSergey Makeev DEFAULT = 0, 40754cb997SSergey Makeev INVALID = -1, 41754cb997SSergey Makeev ASSIGN_FROM_CONTEXT = -2 42754cb997SSergey Makeev }; 43754cb997SSergey Makeev 44754cb997SSergey Makeev TaskGroup()45754cb997SSergey Makeev TaskGroup() 46754cb997SSergey Makeev { 47754cb997SSergey Makeev id = INVALID; 48754cb997SSergey Makeev } 49754cb997SSergey Makeev TaskGroup(PredefinedValues v)50754cb997SSergey Makeev explicit TaskGroup(PredefinedValues v) 51754cb997SSergey Makeev { 52*2e846c40SSergey Makeev id = (int16)v; 53754cb997SSergey Makeev } 54754cb997SSergey Makeev TaskGroup(int16 _id)55*2e846c40SSergey Makeev explicit TaskGroup(int16 _id) 56754cb997SSergey Makeev { 57754cb997SSergey Makeev id = _id; 58754cb997SSergey Makeev } 59754cb997SSergey Makeev Default()60754cb997SSergey Makeev static TaskGroup Default() 61754cb997SSergey Makeev { 62754cb997SSergey Makeev return TaskGroup(DEFAULT); 63754cb997SSergey Makeev } 64754cb997SSergey Makeev 65754cb997SSergey Makeev TaskGroup & operator= (const PredefinedValues & v) 66754cb997SSergey Makeev { 67*2e846c40SSergey Makeev id = (int16)v; 68754cb997SSergey Makeev return *this; 69754cb997SSergey Makeev } 70754cb997SSergey Makeev 71754cb997SSergey Makeev bool operator== (const PredefinedValues & v) const 72754cb997SSergey Makeev { 73754cb997SSergey Makeev return (id == v); 74754cb997SSergey Makeev } 75754cb997SSergey Makeev 76754cb997SSergey Makeev bool operator== (const TaskGroup & other) const 77754cb997SSergey Makeev { 78754cb997SSergey Makeev return (id == other.id); 79754cb997SSergey Makeev } 80754cb997SSergey Makeev 81754cb997SSergey Makeev bool operator!= (const TaskGroup & other) const 82754cb997SSergey Makeev { 83754cb997SSergey Makeev return (id != other.id); 84754cb997SSergey Makeev } 85754cb997SSergey Makeev GetValidIndex()86754cb997SSergey Makeev int GetValidIndex() const 87754cb997SSergey Makeev { 88754cb997SSergey Makeev MT_ASSERT(IsValid(), "Try to get invalid index"); 89754cb997SSergey Makeev 90754cb997SSergey Makeev return id; 91754cb997SSergey Makeev } 92754cb997SSergey Makeev IsValid()93754cb997SSergey Makeev bool IsValid() const 94754cb997SSergey Makeev { 95754cb997SSergey Makeev if (id == INVALID) 96754cb997SSergey Makeev return false; 97754cb997SSergey Makeev 98754cb997SSergey Makeev if (id == ASSIGN_FROM_CONTEXT) 99754cb997SSergey Makeev return false; 100754cb997SSergey Makeev 101754cb997SSergey Makeev return (id >= 0 && id < MT_MAX_GROUPS_COUNT); 102754cb997SSergey Makeev } 103754cb997SSergey Makeev 104754cb997SSergey Makeev 105754cb997SSergey Makeev 106754cb997SSergey Makeev }; 107754cb997SSergey Makeev 108754cb997SSergey Makeev 109754cb997SSergey Makeev 11058964d0bSSergey Makeev } 111