1 /*------------------------------------------------------------------------- 2 * drawElements Quality Program Random Shader Generator 3 * ---------------------------------------------------- 4 * 5 * Copyright 2014 The Android Open Source Project 6 * 7 * Licensed under the Apache License, Version 2.0 (the "License"); 8 * you may not use this file except in compliance with the License. 9 * You may obtain a copy of the License at 10 * 11 * http://www.apache.org/licenses/LICENSE-2.0 12 * 13 * Unless required by applicable law or agreed to in writing, software 14 * distributed under the License is distributed on an "AS IS" BASIS, 15 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 16 * See the License for the specific language governing permissions and 17 * limitations under the License. 18 * 19 *//*! 20 * \file 21 * \brief Token class. 22 *//*--------------------------------------------------------------------*/ 23 24 #include "rsgToken.hpp" 25 #include "deMemory.h" 26 #include "deString.h" 27 28 namespace rsg 29 { 30 Token(const char * identifier)31Token::Token (const char* identifier) 32 : m_type(IDENTIFIER) 33 { 34 m_arg.identifier = deStrdup(identifier); 35 if (!m_arg.identifier) 36 throw std::bad_alloc(); 37 } 38 ~Token(void)39Token::~Token (void) 40 { 41 if (m_type == IDENTIFIER) 42 deFree(m_arg.identifier); 43 } 44 operator =(const Token & other)45Token& Token::operator= (const Token& other) 46 { 47 if (m_type == IDENTIFIER) 48 { 49 deFree(m_arg.identifier); 50 m_arg.identifier = DE_NULL; 51 } 52 53 m_type = other.m_type; 54 55 if (m_type == IDENTIFIER) 56 { 57 m_arg.identifier = deStrdup(other.m_arg.identifier); 58 if (!m_arg.identifier) 59 throw std::bad_alloc(); 60 } 61 else if (m_type == FLOAT_LITERAL) 62 m_arg.floatValue = other.m_arg.floatValue; 63 else if (m_type == INT_LITERAL) 64 m_arg.intValue = other.m_arg.intValue; 65 else if (m_type == BOOL_LITERAL) 66 m_arg.boolValue = other.m_arg.boolValue; 67 68 return *this; 69 } 70 Token(const Token & other)71Token::Token (const Token& other) 72 : m_type(TYPE_LAST) 73 { 74 *this = other; 75 } 76 operator !=(const Token & other) const77bool Token::operator!= (const Token& other) const 78 { 79 if (m_type != other.m_type) 80 return false; 81 82 if (m_type == IDENTIFIER && !deStringEqual(m_arg.identifier, other.m_arg.identifier)) 83 return false; 84 else if (m_type == FLOAT_LITERAL && m_arg.floatValue != other.m_arg.floatValue) 85 return false; 86 else if (m_type == INT_LITERAL && m_arg.intValue != other.m_arg.intValue) 87 return false; 88 else if (m_type == BOOL_LITERAL && m_arg.boolValue != other.m_arg.boolValue) 89 return false; 90 91 return true; 92 } 93 TokenStream(void)94TokenStream::TokenStream (void) 95 : m_tokens (ALLOC_SIZE) 96 , m_numTokens (0) 97 { 98 } 99 ~TokenStream(void)100TokenStream::~TokenStream (void) 101 { 102 } 103 104 } // rsg 105