Remove dynamic exceptions
[anna.git] / source / core / util / TextVariable.cpp
1 // ANNA - Anna is Not Nothingness Anymore                                                         //
2 //                                                                                                //
3 // (c) Copyright 2005-2015 Eduardo Ramos Testillano & Francisco Ruiz Rayo                         //
4 //                                                                                                //
5 // See project site at http://redmine.teslayout.com/projects/anna-suite                           //
6 // See accompanying file LICENSE or copy at http://www.teslayout.com/projects/public/anna.LICENSE //
7
8
9 #include <anna/core/util/TextVariable.hpp>
10
11 using namespace std;
12 using namespace anna;
13
14 TextVariable::TextVariable(const char* name, const Type::_v type, const anna::String& expression) :
15   Variable(name, type),
16   a_expression(expression) {
17 }
18
19 const char* TextVariable::compose(DataBlock& buffer) const
20 noexcept(false) {
21   if(Variable::isNull() == true)
22     throw RuntimeException(asString(), ANNA_FILE_LOCATION);
23
24   switch(getType()) {
25   case Variable::Type::String:
26     buffer.allocate(a_expression.length() + anna_strlen(getStringValue()) + 1);
27     sprintf((char*) buffer.getData(), a_expression.c_str(), getStringValue());
28     break;
29   case Variable::Type::Integer:
30     buffer.allocate(a_expression.length() + 16);
31     sprintf((char*) buffer.getData(), a_expression.c_str(), getIntegerValue());
32     break;
33   case Variable::Type::Integer64:
34     buffer.allocate(a_expression.length() + 32);
35     sprintf((char*) buffer.getData(), a_expression.c_str(), getInteger64Value());
36     break;
37   case Variable::Type::Float:
38     buffer.allocate(a_expression.length() + 32);
39     sprintf((char*) buffer.getData(), a_expression.c_str(), getFloatValue());
40     break;
41   default: break;
42   }
43
44   return buffer.getData();
45 }