Fix T58447: Unselected bone used for constraint target
[blender.git] / source / blender / collada / ExtraTags.cpp
1 /*
2  * This program is free software; you can redistribute it and/or
3  * modify it under the terms of the GNU General Public License
4  * as published by the Free Software Foundation; either version 2
5  * of the License, or (at your option) any later version.
6  *
7  * This program is distributed in the hope that it will be useful,
8  * but WITHOUT ANY WARRANTY; without even the implied warranty of
9  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
10  * GNU General Public License for more details.
11  *
12  * You should have received a copy of the GNU General Public License
13  * along with this program; if not, write to the Free Software Foundation,
14  * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
15  */
16
17 /** \file
18  * \ingroup collada
19  */
20
21 #include <stddef.h>
22 #include <stdlib.h>
23 #include "BLI_string.h"
24
25 #include <iostream>
26
27 #include "ExtraTags.h"
28
29 ExtraTags::ExtraTags(std::string profile)
30 {
31   this->profile = profile;
32   this->tags = std::map<std::string, std::string>();
33 }
34
35 ExtraTags::~ExtraTags()
36 {
37 }
38
39 bool ExtraTags::isProfile(std::string profile)
40 {
41   return this->profile == profile;
42 }
43
44 bool ExtraTags::addTag(std::string tag, std::string data)
45 {
46   tags[tag] = data;
47
48   return true;
49 }
50
51 int ExtraTags::asInt(std::string tag, bool *ok)
52 {
53   if (tags.find(tag) == tags.end()) {
54     *ok = false;
55     return -1;
56   }
57   *ok = true;
58   return atoi(tags[tag].c_str());
59 }
60
61 float ExtraTags::asFloat(std::string tag, bool *ok)
62 {
63   if (tags.find(tag) == tags.end()) {
64     *ok = false;
65     return -1.0f;
66   }
67   *ok = true;
68   return (float)atof(tags[tag].c_str());
69 }
70
71 std::string ExtraTags::asString(std::string tag, bool *ok)
72 {
73   if (tags.find(tag) == tags.end()) {
74     *ok = false;
75     return "";
76   }
77   *ok = true;
78   return tags[tag];
79 }
80
81 bool ExtraTags::setData(std::string tag, short *data)
82 {
83   bool ok = false;
84   int tmp = asInt(tag, &ok);
85   if (ok) {
86     *data = (short)tmp;
87   }
88   return ok;
89 }
90
91 bool ExtraTags::setData(std::string tag, int *data)
92 {
93   bool ok = false;
94   int tmp = asInt(tag, &ok);
95   if (ok) {
96     *data = tmp;
97   }
98   return ok;
99 }
100
101 bool ExtraTags::setData(std::string tag, float *data)
102 {
103   bool ok = false;
104   float tmp = asFloat(tag, &ok);
105   if (ok) {
106     *data = tmp;
107   }
108   return ok;
109 }
110
111 bool ExtraTags::setData(std::string tag, char *data)
112 {
113   bool ok = false;
114   int tmp = asInt(tag, &ok);
115   if (ok) {
116     *data = (char)tmp;
117   }
118   return ok;
119 }
120
121 std::string ExtraTags::setData(std::string tag, std::string &data)
122 {
123   bool ok = false;
124   std::string tmp = asString(tag, &ok);
125   return (ok) ? tmp : data;
126 }