Mercurial > projects > ldc
view gen/utils.h @ 1468:7d1e815b4f76
Change the frontend generated assert(this) or assert(&this) in D2 to set the ThisExp::var field.
author | Tomas Lindquist Olsen <tomas.l.olsen gmail com> |
---|---|
date | Wed, 03 Jun 2009 13:11:01 +0200 |
parents | ec1d9dc1d32a |
children |
line wrap: on
line source
#ifndef __LDC_GEN_UTILS_H__ #define __LDC_GEN_UTILS_H__ #include "root.h" /// Very simple templated iterator for DMD ArrayS. template<class C> struct ArrayIter { Array* array; size_t index; ArrayIter(Array& arr, size_t idx = 0) : array(&arr), index(idx) { } ArrayIter(Array* arr, size_t idx = 0) : array(arr), index(idx) { assert(arr && "null array"); } ArrayIter<C>& operator=(const Array& arr) { array = &arr; index = 0; return *this; } ArrayIter<C>& operator=(const Array* arr) { assert(arr && "null array"); array = arr; index = 0; return *this; } bool done() { return index >= array->dim; } bool more() { return index < array->dim; } C* get() { return static_cast<C*>(array->data[index]); } C* operator->() { return get(); } C* operator*() { return get(); } void next() { ++index; } bool operator==(const ArrayIter<C>& other) { return &array->data[index] == &other.array->data[other.index]; } }; // some aliases typedef ArrayIter<Dsymbol> DsymbolIter; typedef ArrayIter<FuncDeclaration> FuncDeclarationIter; typedef ArrayIter<VarDeclaration> VarDeclarationIter; #endif