Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
eclipse
GitHub Repository: eclipse/sumo
Path: blob/main/src/netedit/GNETagProperties.h
169666 views
1
/****************************************************************************/
2
// Eclipse SUMO, Simulation of Urban MObility; see https://eclipse.dev/sumo
3
// Copyright (C) 2001-2025 German Aerospace Center (DLR) and others.
4
// This program and the accompanying materials are made available under the
5
// terms of the Eclipse Public License 2.0 which is available at
6
// https://www.eclipse.org/legal/epl-2.0/
7
// This Source Code may also be made available under the following Secondary
8
// Licenses when the conditions for such availability set forth in the Eclipse
9
// Public License 2.0 are satisfied: GNU General Public License, version 2
10
// or later which is available at
11
// https://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html
12
// SPDX-License-Identifier: EPL-2.0 OR GPL-2.0-or-later
13
/****************************************************************************/
14
/// @file GNETagProperties.h
15
/// @author Pablo Alvarez Lopez
16
/// @date Jan 2020
17
///
18
// Abstract Base class for tag properties used in GNEAttributeCarrier
19
/****************************************************************************/
20
#pragma once
21
#include <config.h>
22
23
#include <utils/gui/globjects/GUIGlObjectTypes.h>
24
#include <utils/gui/images/GUIIcons.h>
25
#include <netedit/GNEViewNetHelper.h>
26
#include "GNEAttributeProperties.h"
27
28
// ===========================================================================
29
// class definitions
30
// ===========================================================================
31
32
class GNETagProperties {
33
34
public:
35
36
/// @brief tag types
37
enum class Type : int {
38
// basic types
39
NETWORKELEMENT = 1 << 0, // Network elements (Edges, Junctions, Lanes...)
40
ADDITIONALELEMENT = 1 << 1, // Additional elements (Bus Stops, Charging Stations, Detectors...)
41
DEMANDELEMENT = 1 << 2, // Demand elements (Routes, Vehicles, Trips...)
42
DATAELEMENT = 1 << 3, // Data elements (DataSets, Data Intervals, EdgeData...)
43
// sub additional elements
44
STOPPINGPLACE = 1 << 4, // StoppingPlaces (BusStops, ChargingStations...)
45
DETECTOR = 1 << 5, // Detectors (E1, E2...)
46
CALIBRATOR = 1 << 6, // Calibrators
47
SHAPE = 1 << 7, // Shapes (Polygons and POIs)
48
TAZELEMENT = 1 << 8, // Traffic Assignment Zones
49
WIRE = 1 << 9, // Wire elements
50
JUPEDSIM = 1 << 10, // JuPedSim elements
51
// sub demand elements
52
VTYPE = 1 << 11, // Vehicle types (vType and vTypeDistribution)
53
VEHICLE = 1 << 12, // Vehicles (Vehicles, trips, flows...)
54
ROUTE = 1 << 13, // Routes and embedded routes
55
STOP_VEHICLE = 1 << 14, // Vehicle stops
56
WAYPOINT_VEHICLE = 1 << 15, // Vehicle waypoints (note: All waypoints are also Stops)
57
FLOW = 1 << 16, // Flows
58
// persons
59
PERSON = 1 << 17, // Persons (Persons and personFlows)
60
PERSONPLAN = 1 << 18, // Person plans (Walks, rides, personTrips and stopPersons)
61
PERSONTRIP = 1 << 19, // Person Trips
62
WALK = 1 << 20, // Walks
63
RIDE = 1 << 21, // Rides
64
STOP_PERSON = 1 << 22, // Person stops
65
// containers
66
CONTAINER = 1 << 23, // Containers (Containers and personFlows)
67
CONTAINERPLAN = 1 << 24, // Container plans (transport, tranships and containerStops)
68
TRANSPORT = 1 << 25, // Transport
69
TRANSHIP = 1 << 26, // Tranship
70
STOP_CONTAINER = 1 << 27, // Container stops
71
// sub data elements
72
GENERICDATA = 1 << 28, // Generic data (GNEEdgeData, GNELaneData...)
73
MEANDATA = 1 << 29, // Mean datas
74
// other
75
INTERNALLANE = 1 << 30, // Internal Lane
76
OTHER = 1 << 31, // Other type (used for TAZSourceSinks, VTypes, etc.)
77
};
78
79
/// @brief tag property
80
enum class Property : int {
81
NOTDRAWABLE = 1 << 0, // Element cannot be drawn in view
82
GEOSHAPE = 1 << 1, // Element's shape acn be defined using a GEO Shape
83
DIALOG = 1 << 2, // Element can be edited using a dialog (GNECalibratorDialog, GNERerouterDialog...)
84
XMLCHILD = 1 << 3, // Element is child of another element and will be written in XML (Example: E3Entry -> E3Detector...)
85
REPARENT = 1 << 4, // Element can be reparent
86
NOTSELECTABLE = 1 << 5, // Element cannot be selected
87
NOPARAMETERS = 1 << 6, // Element doesn't accept parameters "key1=value1|key2=value2|...|keyN=valueN" (by default all tags supports parameters)
88
RTREE = 1 << 7, // Element is placed in RTREE
89
CENTERAFTERCREATION = 1 << 8, // Camera is moved after element creation
90
REQUIRE_PROJ = 1 << 9, // Element require a geo-projection defined in network
91
VCLASS_ICON = 1 << 10, // Element returns icon depending of their vClass
92
SYMBOL = 1 << 11, // Element is a symbol (VSSSymbols, RerouterSymbols...)
93
EXTENDED = 1 << 12, // Element contains extended attributes (Usually vTypes)
94
HIERARCHICAL = 1 << 13, // Element is a hierarchical
95
LISTED = 1 << 14, // Element is a listed elements (for example, rerouter children)
96
NO_PROPERTY = 1 << 15, // Element doesn't have properties
97
};
98
99
/// @brief element in which this element is placed
100
enum class Over : int {
101
VIEW = 1 << 0, // No parents
102
JUNCTION = 1 << 1, // Placed over junction
103
EDGE = 1 << 2, // Placed over edge
104
EDGES = 1 << 3, // Placed over edges
105
CONSECUTIVE_EDGES = 1 << 4, // Placed over consecutive
106
LANE = 1 << 5, // Placed over lane
107
LANES = 1 << 6, // Placed over lanes
108
CONSECUTIVE_LANES = 1 << 4, // Placed over consecutive lanes
109
ROUTE = 1 << 7, // Placed over route
110
ROUTE_EMBEDDED = 1 << 8, // Placed over route embedded
111
BUSSTOP = 1 << 9, // Placed over busStop
112
TRAINSTOP = 1 << 10, // Placed over trainStop
113
CONTAINERSTOP = 1 << 11, // Placed over containerStop
114
CHARGINGSTATION = 1 << 12, // Placed over charging station
115
PARKINGAREA = 1 << 13, // Placed over parking area
116
FROM_EDGE = 1 << 14, // Starts in edge
117
FROM_TAZ = 1 << 15, // Starts in TAZ
118
FROM_JUNCTION = 1 << 16, // Starts in junction
119
FROM_BUSSTOP = 1 << 17, // Starts in busStop
120
FROM_TRAINSTOP = 1 << 18, // Starts in trainStop
121
FROM_CONTAINERSTOP = 1 << 19, // Starts in containerStop
122
FROM_CHARGINGSTATION = 1 << 20, // Starts in chargingStation
123
FROM_PARKINGAREA = 1 << 21, // Starts in parkingArea
124
TO_EDGE = 1 << 22, // Ends in edge
125
TO_TAZ = 1 << 23, // Ends in TAZ
126
TO_JUNCTION = 1 << 24, // Ends in junction
127
TO_BUSSTOP = 1 << 25, // Ends in busStop
128
TO_TRAINSTOP = 1 << 26, // Ends in trainStop
129
TO_CONTAINERSTOP = 1 << 27, // Ends in containerStop
130
TO_CHARGINGSTATION = 1 << 28, // Ends in chargingStation
131
TO_PARKINGAREA = 1 << 29, // Ends in parkingArea
132
};
133
134
// @brief conflicts
135
enum class Conflicts : int {
136
POS_LANE = 1 << 0, // Position over lane isn't valid
137
POS_LANE_START = 1 << 1, // Start position over lane isn't valid
138
POS_LANE_END = 1 << 2, // End position over lane isn't valid
139
NO_ADDITIONAL_CHILDREN = 1 << 3, // Element doesn't have additional children
140
NO_CONFLICTS = 1 << 4, // Element doesn't have conflicts
141
};
142
143
/// @brief declare friend class
144
friend class GNEAttributeProperties;
145
146
/// @brief parameter constructor
147
GNETagProperties(const SumoXMLTag tag, GNETagProperties* parent, const Type tagType, const Property tagProperty, const Over tagOver,
148
const Conflicts conflicts, const GUIIcon icon, const GUIGlObjectType GLType, const SumoXMLTag XMLTag,
149
const std::string tooltip, std::vector<SumoXMLTag> XMLParentTags = {},
150
const unsigned int backgroundColor = FXRGBA(255, 255, 255, 255), const std::string selectorText = "");
151
152
/// @brief parameter constructor for hierarchical elements
153
GNETagProperties(const SumoXMLTag tag, GNETagProperties* parent, const GUIIcon icon, const std::string tooltip,
154
const unsigned int backgroundColor = FXRGBA(255, 255, 255, 255), const std::string selectorText = "");
155
156
/// @brief destructor
157
~GNETagProperties();
158
159
/// @brief get Tag vinculated with this attribute Property
160
SumoXMLTag getTag() const;
161
162
/// @brief get Tag vinculated with this attribute Property in String Format (used to avoid multiple calls to toString(...)
163
const std::string& getTagStr() const;
164
165
/// @brief check Tag integrity (this include all their attributes)
166
void checkTagIntegrity() const;
167
168
/// @brief get field string (by default tag in string format)
169
const std::string& getSelectorText() const;
170
171
/// @brief get tooltip text
172
const std::string& getTooltipText() const;
173
174
/// @brief get background color
175
unsigned int getBackGroundColor() const;
176
177
/// @brief get all attribute properties
178
const std::vector<const GNEAttributeProperties*>& getAttributeProperties() const;
179
180
/// @brief get attribute propety associated with the given Sumo XML Attribute (throw error if doesn't exist)
181
const GNEAttributeProperties* getAttributeProperties(SumoXMLAttr attr) const;
182
183
/// @brief get attribute propety by index (throw error if doesn't exist)
184
const GNEAttributeProperties* getAttributeProperties(const int index) const;
185
186
/// @brief get attribute value
187
const GNEAttributeProperties* at(int index) const;
188
189
/// @brief check if current TagProperties owns the attribute "attr"
190
bool hasAttribute(SumoXMLAttr attr) const;
191
192
/// @brief get number of attributes
193
int getNumberOfAttributes() const;
194
195
/// @brief get GUI icon associated to this tag property
196
GUIIcon getGUIIcon() const;
197
198
/// @brief get GUIGlObjectType associated with this tag property
199
GUIGlObjectType getGLType() const;
200
201
/// @brief default values
202
/// @{
203
204
/// @brief get XML tag
205
SumoXMLTag getXMLTag() const;
206
207
/// @brief get XML parent tags
208
const std::vector<SumoXMLTag>& getXMLParentTags() const;
209
210
/// @brief return true if tag correspond to an element that can be reparent
211
bool canBeReparent() const;
212
213
/// @brief default values
214
/// @{
215
216
/// @brief return the default value of the attribute of an element
217
const std::string& getDefaultStringValue(SumoXMLAttr attr) const;
218
219
/// @brief get default int value
220
int getDefaultIntValue(SumoXMLAttr attr) const;
221
222
/// @brief get default double value
223
double getDefaultDoubleValue(SumoXMLAttr attr) const;
224
225
/// @brief get default time value
226
SUMOTime getDefaultTimeValue(SumoXMLAttr attr) const;
227
228
/// @brief get default bool value
229
bool getDefaultBoolValue(SumoXMLAttr attr) const;
230
231
/// @brief get default bool value
232
const RGBColor& getDefaultColorValue(SumoXMLAttr attr) const;
233
234
/// @}
235
236
/// @brief hierarchy functions
237
/// @{
238
239
/// @brief get hierarchical parent of this element
240
const GNETagProperties* getHierarchicalParent() const;
241
242
/// @brief get all parents, beginning from current element (root not included) until this element
243
const std::vector<const GNETagProperties*> getHierarchicalParentsRecuersively() const;
244
245
/// @brief get children of this tag property
246
const std::vector<const GNETagProperties*>& getHierarchicalChildren() const;
247
248
/// @brief get all children tags (Including children of their children)
249
std::vector<const GNETagProperties*> getHierarchicalChildrenRecursively() const;
250
251
/// @brief get all children attributes sorted by name (Including this)
252
std::map<std::string, const GNEAttributeProperties*> getHierarchicalChildrenAttributesRecursively(const bool onlyCommon, const bool onlyDrawables) const;
253
254
/// @}
255
256
/// @brief get supermode associated with this tag
257
Supermode getSupermode() const;
258
259
/// @brief check if this is a hierarchical tag
260
bool isHierarchicalTag() const;
261
262
/// @brief network elements
263
/// @{
264
265
/// @brief return true if tag correspond to a network element
266
bool isNetworkElement() const;
267
268
/// @brief return true if tag correspond to an additional element (note: this include TAZ, shapes and wires)
269
bool isAdditionalElement() const;
270
271
/// @brief return true if tag correspond to a pure additional element
272
bool isAdditionalPureElement() const;
273
274
/// @brief return true if tag correspond to a demand element
275
bool isDemandElement() const;
276
277
/// @brief return true if tag correspond to a data element
278
bool isDataElement() const;
279
280
/// @brief return true if tag correspond to a other element (sourceSinks, vTypes, etc.)
281
bool isOtherElement() const;
282
283
/// @}
284
285
/// @brief additional elements
286
/// @{
287
/// @brief return true if tag correspond to a detector (Only used to group all stoppingPlaces in the output XML)
288
bool isStoppingPlace() const;
289
290
/// @brief return true if tag correspond to a shape (Only used to group all detectors in the XML)
291
bool isDetector() const;
292
293
/// @brief return true if tag correspond to a calibrator (Only used to group all detectors in the XML)
294
bool isCalibrator() const;
295
296
/// @brief return true if tag correspond to a shape
297
bool isShapeElement() const;
298
299
/// @brief return true if tag correspond to a TAZ element
300
bool isTAZElement() const;
301
302
/// @brief return true if tag correspond to a Wire element
303
bool isWireElement() const;
304
305
/// @brief return true if tag correspond to a JuPedSim element
306
bool isJuPedSimElement() const;
307
308
/// @}
309
310
/// @brief demand elements
311
/// @{
312
/// @brief return true if tag correspond to a vehicle/person/container type element
313
bool isType() const;
314
315
/// @brief return true if tag correspond to a type distribution element
316
bool isTypeDist() const;
317
318
/// @brief return true if tag correspond to a vehicle element
319
bool isVehicle() const;
320
321
/// @brief return true if tag correspond to a route element
322
bool isRoute() const;
323
324
/// @brief return true if tag correspond to a vehicle stop element
325
bool isVehicleStop() const;
326
327
/// @brief return true if tag correspond to a vehicle waypoint element
328
bool isVehicleWaypoint() const;
329
330
/// @brief return true if tag correspond to a flow element
331
bool isFlow() const;
332
333
/// @brief return true if tag correspond to a person element
334
bool isPerson() const;
335
336
/// @brief return true if tag correspond to a container element
337
bool isContainer() const;
338
339
/// @brief return true if tag correspond to an element with a type as a first parent
340
bool hasTypeParent() const;
341
342
/// @}
343
344
/// @brief plans
345
/// @{
346
/// @brief return true if tag correspond to a plan
347
bool isPlan() const;
348
349
/// @brief return true if tag correspond to a person plan
350
bool isPlanPerson() const;
351
352
/// @brief return true if tag correspond to a container plan
353
bool isPlanContainer() const;
354
355
/// @brief return true if tag correspond to a person trip plan
356
bool isPlanPersonTrip() const;
357
358
/// @brief return true if tag correspond to a walk plan
359
bool isPlanWalk() const;
360
361
/// @brief return true if tag correspond to a ride plan
362
bool isPlanRide() const;
363
364
/// @brief return true if tag correspond to a transport
365
bool isPlanTransport() const;
366
367
/// @brief return true if tag correspond to a tranship
368
bool isPlanTranship() const;
369
370
/// @brief return true if tag correspond to a stop plan
371
bool isPlanStop() const;
372
373
/// @brief return true if tag correspond to a person stop plan
374
bool isPlanStopPerson() const;
375
376
/// @brief return true if tag correspond to a container stop plan
377
bool isPlanStopContainer() const;
378
379
/// @}
380
381
/// @brief data elements
382
/// @{
383
/// @brief return true if tag correspond to a generic data element
384
bool isGenericData() const;
385
386
/// @brief return true if tag correspond to a mean data element
387
bool isMeanData() const;
388
389
/// @}
390
391
/// @brief plan parents
392
/// @{
393
394
/// @brief return true if tag correspond to a vehicle placed over a route
395
bool vehicleRoute() const;
396
397
/// @brief return true if tag correspond to a vehicle placed over an embedded route
398
bool vehicleRouteEmbedded() const;
399
400
/// @brief return true if tag correspond to a vehicle placed over from-to edges
401
bool vehicleEdges() const;
402
403
/// @brief return true if tag correspond to a vehicle placed over from-to junctions
404
bool vehicleJunctions() const;
405
406
/// @brief return true if tag correspond to a vehicle placed over from-to TAZs
407
bool vehicleTAZs() const;
408
409
/// @}
410
411
/// @brief plan parents
412
/// @{
413
/// @brief return true if tag correspond to a plan placed over edges
414
bool planConsecutiveEdges() const;
415
416
/// @brief return true if tag correspond to a plan placed over route
417
bool planRoute() const;
418
419
/// @brief return true if tag correspond to a plan placed over edge
420
bool planEdge() const;
421
422
/// @brief return true if tag correspond to a plan placed over busStop
423
bool planBusStop() const;
424
425
/// @brief return true if tag correspond to a plan placed over trainStop
426
bool planTrainStop() const;
427
428
/// @brief return true if tag correspond to a plan placed over containerStop
429
bool planContainerStop() const;
430
431
/// @brief return true if tag correspond to a plan placed over chargingStation
432
bool planChargingStation() const;
433
434
/// @brief return true if tag correspond to a plan placed over parkingArea
435
bool planParkingArea() const;
436
437
/// @brief return true if tag correspond to a plan placed in stoppingPlace
438
bool planStoppingPlace() const;
439
440
/// @brief return true if tag correspond to a plan with from-to parents
441
bool planFromTo() const;
442
443
/// @brief return true if tag correspond to a plan that starts in edge
444
bool planFromEdge() const;
445
446
/// @brief return true if tag correspond to a plan that starts in TAZ
447
bool planFromTAZ() const;
448
449
/// @brief return true if tag correspond to a plan that starts in junction
450
bool planFromJunction() const;
451
452
/// @brief return true if tag correspond to a plan that starts in busStop
453
bool planFromBusStop() const;
454
455
/// @brief return true if tag correspond to a plan that starts in trainStop
456
bool planFromTrainStop() const;
457
458
/// @brief return true if tag correspond to a plan that starts in containerStop
459
bool planFromContainerStop() const;
460
461
/// @brief return true if tag correspond to a plan that starts in chargingStation
462
bool planFromChargingStation() const;
463
464
/// @brief return true if tag correspond to a plan that starts in parkingAera
465
bool planFromParkingArea() const;
466
467
/// @brief return true if tag correspond to a plan that starts in stoppingPlace
468
bool planFromStoppingPlace() const;
469
470
/// @brief return true if tag correspond to a plan that starts in edge
471
bool planToEdge() const;
472
473
/// @brief return true if tag correspond to a plan that starts in TAZ
474
bool planToTAZ() const;
475
476
/// @brief return true if tag correspond to a plan that starts in junction
477
bool planToJunction() const;
478
479
/// @brief return true if tag correspond to a plan that starts in busStop
480
bool planToBusStop() const;
481
482
/// @brief return true if tag correspond to a plan that starts in trainStop
483
bool planToTrainStop() const;
484
485
/// @brief return true if tag correspond to a plan that starts in containerStop
486
bool planToContainerStop() const;
487
488
/// @brief return true if tag correspond to a plan that starts in chargingStation
489
bool planToChargingStation() const;
490
491
/// @brief return true if tag correspond to a plan that starts in parkingArea
492
bool planToParkingArea() const;
493
494
/// @brief return true if tag correspond to a plan that ends in stoppingPlace
495
bool planToStoppingPlace() const;
496
497
/// @}
498
499
/// @brief return true if tag correspond to an element child of another element (Example: E3->Entry/Exit)
500
bool isChild() const;
501
502
/// @brief return true if tag correspond to a symbol element
503
bool isSymbol() const;
504
505
/// @brief return true if tag correspond to an internal lane
506
bool isInternalLane() const;
507
508
/// @brief return true if tag correspond to a drawable element
509
bool isDrawable() const;
510
511
/// @brief return true if tag correspond to a selectable element
512
bool isSelectable() const;
513
514
/// @brief return true if tag correspond to an element that can use a geo shape
515
bool hasGEOShape() const;
516
517
/// @brief return true if tag correspond to an element that can be edited using a dialog
518
bool hasDialog() const;
519
520
/// @brief return true if tag correspond to an element that contains extended attributes
521
bool hasExtendedAttributes() const;
522
523
/// @brief return true if Tag correspond to an element that supports parameters "key1=value1|key2=value2|...|keyN=valueN"
524
bool hasParameters() const;
525
526
/// @brief return true if Tag correspond to an element that has to be placed in RTREE
527
bool isPlacedInRTree() const;
528
529
/// @brief return true if Tag correspond to a listed element
530
bool isListedElement() const;
531
532
/// @brief return true if tag correspond to an element that center camera after creation
533
bool canCenterCameraAfterCreation() const;
534
535
/// @brief return true if tag correspond to an element that requires a geo projection
536
bool requireProj() const;
537
538
/// @brief return true if tag correspond to an element that has vClass icons
539
bool vClassIcon() const;
540
541
protected:
542
/// @brief add child
543
void addChild(const GNETagProperties* child);
544
545
private:
546
/// @brief Sumo XML Tag vinculated wit this tag Property
547
const SumoXMLTag myTag = SUMO_TAG_NOTHING;
548
549
/// @brief Sumo XML Tag vinculated wit this tag Property in String format
550
const std::string myTagStr;
551
552
/// @brief tag property parent
553
const GNETagProperties* myParent = nullptr;
554
555
/// @brief tag property children
556
std::vector<const GNETagProperties*> myChildren;
557
558
/// @brief tag Types
559
const Type myTagType = Type::OTHER;
560
561
/// @brief tag properties
562
const Property myTagProperty = Property::NO_PROPERTY;
563
564
/// @brief tag over
565
const Over myTagOver = Over::VIEW;
566
567
/// @brief conflicts
568
const Conflicts myConflicts = Conflicts::NO_CONFLICTS;
569
570
/// @brief vector with the attribute values vinculated with this Tag
571
std::vector<const GNEAttributeProperties*> myAttributeProperties;
572
573
/// @brief icon associated to this tag property
574
const GUIIcon myIcon = GUIIcon::EMPTY;
575
576
/// @brief GUIGlObjectType associated with this tag property
577
const GUIGlObjectType myGLType = GUIGlObjectType::GLO_MAX;
578
579
/// @brief Tag written in XML and used in GNENetHelper::AttributeCarriers
580
const SumoXMLTag myXMLTag = SUMO_TAG_NOTHING;
581
582
/// @brief tooltip text
583
const std::string myTooltipText;
584
585
/// @brief vector with XML parent tags (used by child elements like access or spaces)
586
const std::vector<SumoXMLTag> myXMLParentTags;
587
588
/// @brief text show in selector text
589
const std::string mySelectorText;
590
591
/// @brief background color (used in labels and textFields, by default white)
592
const unsigned int myBackgroundColor = 0;
593
594
/// @brief recursive function for get all children tag properites (Including this)
595
void getChildrenTagProperties(const GNETagProperties* tagProperties, std::vector<const GNETagProperties*>& result) const;
596
597
/// @brief recursive function for get all children attributes (Including this)
598
void getChildrenAttributes(const GNETagProperties* tagProperties, std::map<std::string, const GNEAttributeProperties*>& result, const bool onlyDrawables) const;
599
600
/// @brief default constructor
601
GNETagProperties() = delete;
602
603
/// @brief Invalidated copy constructor.
604
GNETagProperties(const GNETagProperties&) = delete;
605
606
/// @brief Invalidated assignment operator
607
GNETagProperties& operator=(const GNETagProperties& src) = delete;
608
};
609
610
/// @brief override tag parent bit operator
611
constexpr GNETagProperties::Type operator|(GNETagProperties::Type a, GNETagProperties::Type b) {
612
return static_cast<GNETagProperties::Type>(static_cast<int>(a) | static_cast<int>(b));
613
}
614
615
/// @brief override tag parent bit operator
616
constexpr bool operator&(GNETagProperties::Type a, GNETagProperties::Type b) {
617
return (static_cast<int>(a) & static_cast<int>(b)) != 0;
618
}
619
620
/// @brief override tag parent bit operator
621
constexpr GNETagProperties::Property operator|(GNETagProperties::Property a, GNETagProperties::Property b) {
622
return static_cast<GNETagProperties::Property>(static_cast<int>(a) | static_cast<int>(b));
623
}
624
625
/// @brief override tag parent bit operator
626
constexpr bool operator&(GNETagProperties::Property a, GNETagProperties::Property b) {
627
return (static_cast<int>(a) & static_cast<int>(b)) != 0;
628
}
629
630
/// @brief override tag parent bit operator
631
constexpr GNETagProperties::Over operator|(GNETagProperties::Over a, GNETagProperties::Over b) {
632
return static_cast<GNETagProperties::Over>(static_cast<int>(a) | static_cast<int>(b));
633
}
634
635
/// @brief override tag parent bit operator
636
constexpr bool operator&(GNETagProperties::Over a, GNETagProperties::Over b) {
637
return (static_cast<int>(a) & static_cast<int>(b)) != 0;
638
}
639
640
/// @brief override tag parent bit operator
641
constexpr GNETagProperties::Conflicts operator|(GNETagProperties::Conflicts a, GNETagProperties::Conflicts b) {
642
return static_cast<GNETagProperties::Conflicts>(static_cast<int>(a) | static_cast<int>(b));
643
}
644
645
/// @brief override tag parent bit operator
646
constexpr bool operator&(GNETagProperties::Conflicts a, GNETagProperties::Conflicts b) {
647
return (static_cast<int>(a) & static_cast<int>(b)) != 0;
648
}
649
650
/****************************************************************************/
651
652