Panda3D
Loading...
Searching...
No Matches
inputDeviceSet.cxx
Go to the documentation of this file.
1/**
2 * PANDA 3D SOFTWARE
3 * Copyright (c) Carnegie Mellon University. All rights reserved.
4 *
5 * All use of this software is subject to the terms of the revised BSD
6 * license. You should have received a copy of this license along
7 * with this source code in a file named "LICENSE."
8 *
9 * @file inputDeviceSet.cxx
10 * @author rdb
11 * @date 2015-12-16
12 */
13
14#include "inputDeviceSet.h"
15#include "indent.h"
16
17/**
18 *
19 */
20InputDeviceSet::
21InputDeviceSet() {
22}
23
24/**
25 *
26 */
27InputDeviceSet::
28InputDeviceSet(const InputDeviceSet &copy) :
29 _devices(copy._devices)
30{
31}
32
33/**
34 *
35 */
36void InputDeviceSet::
37operator = (const InputDeviceSet &copy) {
38 _devices = copy._devices;
39}
40
41/**
42 * Adds a new InputDevice to the collection.
43 */
45add_device(InputDevice *device) {
46 _devices.insert(device);
47}
48
49/**
50 * Removes the indicated InputDevice from the collection.
51 * @return true if the device was removed, false if it was not a member.
52 */
55 return _devices.erase(device) > 0;
56}
57
58/**
59 * Adds all the InputDevices indicated in the other collection to this set.
60 */
62add_devices_from(const InputDeviceSet &other) {
63 size_t other_num_devices = other.size();
64 for (size_t i = 0; i < other_num_devices; i++) {
65 _devices.push_back(other[i]);
66 }
67 _devices.sort();
68}
69
70/**
71 * Removes from this collection all of the devices listed in the other set.
72 */
75 InputDevices new_devices;
76 InputDevices::const_iterator it;
77 for (it = _devices.begin(); it != _devices.end(); ++it) {
78 if (!other.has_device(*it)) {
79 new_devices.push_back(*it);
80 }
81 }
82 new_devices.sort();
83 _devices.swap(new_devices);
84}
85
86/**
87 * Returns true if the indicated InputDevice appears in this collection, false
88 * otherwise.
89 */
91has_device(InputDevice *device) const {
92 InputDevices::const_iterator it = _devices.find(device);
93 return (it != _devices.end());
94}
95
96/**
97 * Removes all InputDevices from the collection.
98 */
100clear() {
101 _devices.clear();
102}
103
104/**
105 * This is a hint to Panda to allocate enough memory to hold the given number
106 * of InputDevices, if you know ahead of time how many you will be adding.
107 */
109reserve(size_t num) {
110 _devices.reserve(num);
111}
112
113/**
114 * Writes a brief one-line description of the InputDeviceSet to the indicated
115 * output stream.
116 */
118output(std::ostream &out) const {
119 if (_devices.size() == 1) {
120 out << "1 input device";
121 } else {
122 out << _devices.size() << " input devices";
123 }
124}
125
126/**
127 * Writes a complete multi-line description of the InputDeviceSet to the
128 * indicated output stream.
129 */
131write(std::ostream &out, int indent_level) const {
132 output(indent(out, indent_level));
133 out << ":\n";
134 indent_level += 2;
135
136 InputDevices::const_iterator it;
137 for (it = _devices.begin(); it != _devices.end(); ++it) {
138 (*it)->output(indent(out, indent_level));
139 out << '\n';
140 }
141}
Manages a list of InputDevice objects, as returned by various InputDeviceManager methods.
void output(std::ostream &out) const
Writes a brief one-line description of the InputDeviceSet to the indicated output stream.
void write(std::ostream &out, int indent_level=0) const
Writes a complete multi-line description of the InputDeviceSet to the indicated output stream.
void reserve(size_t num)
This is a hint to Panda to allocate enough memory to hold the given number of InputDevices,...
void remove_devices_from(const InputDeviceSet &other)
Removes from this collection all of the devices listed in the other set.
void add_devices_from(const InputDeviceSet &other)
Adds all the InputDevices indicated in the other collection to this set.
void clear()
Removes all InputDevices from the collection.
size_t size() const
Returns the number of devices in the collection.
void add_device(InputDevice *device)
Adds a new InputDevice to the collection.
bool remove_device(InputDevice *device)
Removes the indicated InputDevice from the collection.
bool has_device(InputDevice *device) const
Returns true if the indicated InputDevice appears in this collection, false otherwise.
This is a structure representing a single input device.
Definition inputDevice.h:53
void reserve(size_type_0 n)
Informs the vector of a planned change in size; ensures that the capacity of the vector is greater th...
iterator_0 begin()
Returns the iterator that marks the first element in the ordered vector.
void push_back(const value_type_0 &key)
Adds the new element to the end of the vector without regard for proper sorting.
void swap(ordered_vector< Key, Compare, Vector > &other)
Exchanges the contents of this vector and the other vector, in constant time (e.g....
size_type_0 size() const
Returns the number of elements in the ordered vector.
iterator_0 end()
Returns the iterator that marks the end of the ordered vector.
void clear()
Removes all elements from the ordered vector.
void sort()
Maps to sort_unique().
std::ostream & indent(std::ostream &out, int indent_level)
A handy function for doing text formatting.
Definition indent.cxx:20
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.