-
-
Notifications
You must be signed in to change notification settings - Fork 163
Expand file tree
/
Copy pathToolTable.cpp
More file actions
98 lines (66 loc) · 2.57 KB
/
ToolTable.cpp
File metadata and controls
98 lines (66 loc) · 2.57 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
/******************************************************************************\
CAMotics is an Open-Source simulation and CAM software.
Copyright (C) 2011-2019 Joseph Coffland <joseph@cauldrondevelopment.com>
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
\******************************************************************************/
#include "ToolTable.h"
#include <cbang/Exception.h>
#include <cbang/String.h>
#include <cbang/log/Logger.h>
#include <cbang/json/Sink.h>
#include <cbang/json/Dict.h>
using namespace std;
using namespace cb;
using namespace GCode;
bool ToolTable::has(unsigned tool) const {return find(tool) != end();}
const Tool &ToolTable::at(unsigned index) const {
for (const_iterator it = begin(); it != end(); it++)
if (!index--) return it->second;
THROW("No tool at index " << index);
}
const Tool &ToolTable::get(unsigned tool) const {
const_iterator it = find(tool);
if (it != end()) return it->second;
THROW("Missing tool " << tool);
}
Tool &ToolTable::get(unsigned tool) {
iterator it = find(tool);
if (it != end()) return it->second;
LOG_WARNING("Auto-creating missing tool " << tool);
return (*this)[tool] = Tool(tool);
}
void ToolTable::set(const Tool &tool) {
insert(value_type(tool.getNumber(), tool)).first->second = tool;
}
void ToolTable::add(const Tool &tool) {
if (!insert(value_type(tool.getNumber(), tool)).second)
THROW("Tool with number " << tool.getNumber()
<< " already in tool table");
LOG_INFO(3, "Added tool " << tool.getNumber() << " with radius "
<< tool.getRadius());
}
void ToolTable::read(const JSON::Value &value) {
clear();
for (auto e: value.entries()) {
Tool tool(String::parseU32(e.key()));
tool.read(e.value()->getDict());
set(tool);
}
}
void ToolTable::write(JSON::Sink &sink) const {
sink.beginDict();
for (const_iterator it = begin(); it != end(); it++) {
sink.beginInsert(String(it->second.getNumber()));
it->second.write(sink, false);
}
sink.endDict();
}