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