16cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDK/* 22228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project * Copyright 2016 Google Inc. 32228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project * 46cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDK * Use of this source code is governed by a BSD-style license that can be 56cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDK * found in the LICENSE file. 62228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project */ 72228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 86cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDK#ifndef SKSL_BLOCK 96cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDK#define SKSL_BLOCK 106cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDK 116cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDK#include "SkSLStatement.h" 126cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDK#include "SkSLSymbolTable.h" 136cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDK 146cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDKnamespace SkSL { 156cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDK 166cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDK/** 176cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDK * A block of multiple statements functioning as a single statement. 186cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDK */ 196cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDKstruct Block : public Statement { 206cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDK Block(int offset, std::vector<std::unique_ptr<Statement>> statements, 216cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDK const std::shared_ptr<SymbolTable> symbols = nullptr) 226cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDK : INHERITED(offset, kBlock_Kind) 236cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDK , fSymbols(std::move(symbols)) 246cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDK , fStatements(std::move(statements)) {} 256cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDK 266cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDK bool isEmpty() const override { 276cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDK for (const auto& s : fStatements) { 286cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDK if (!s->isEmpty()) { 296cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDK return false; 306cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDK } 316cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDK } 326cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDK return true; 332228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project } 342228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 352228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project String description() const override { 366cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDK String result("{"); 376cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDK for (size_t i = 0; i < fStatements.size(); i++) { 386cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDK result += "\n"; 392228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project result += fStatements[i]->description(); 406cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDK } 416cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDK result += "\n}\n"; 422228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project return result; 436cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDK } 446cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDK 456cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDK // it's important to keep fStatements defined after (and thus destroyed before) fSymbols, 466cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDK // because destroying statements can modify reference counts in symbols 472228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project const std::shared_ptr<SymbolTable> fSymbols; 482228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project std::vector<std::unique_ptr<Statement>> fStatements; 496cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDK 506cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDK typedef Statement INHERITED; 512228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project}; 526cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDK 536cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDK} // namespace 542228e360595641dd906bf1773307f43d304f5b2The Android Open Source Project 556cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDK#endif 566cfabd35363c3ef5e3b209b867169a500b3ccc3cFraunhofer IIS FDK