Mercurial > ~dholland > hg > ag > index.cgi
view anagram/support/register-imp.h @ 23:cac4c76600eb
Update lint ok file for recent change.
author | David A. Holland |
---|---|
date | Mon, 13 Jun 2022 00:17:10 -0400 |
parents | 13d2b8934445 |
children |
line wrap: on
line source
/* * AnaGram, A System for Syntax Directed Programming * Copyright 1993-2002 Parsifal Software. All Rights Reserved. * See the file COPYING for license and usage terms. * * register-imp.h */ #ifndef REGISTER_IMP_H #define REGISTER_IMP_H template <class Descriptor> AgStack<Descriptor> ObjectRegister<Descriptor>::descriptorList; template <class Descriptor> ObjectRegister<Descriptor>::ObjectRegister(const Descriptor &d) : index(descriptorList.size()) { descriptorList.push(d); descriptor = &descriptorList.top(); } template <class Descriptor> ObjectRegister<Descriptor>::ObjectRegister(const ObjectRegister<Descriptor> &d) : index(d.index), descriptor(d.descriptor) { // Nothing to do } template <class Descriptor> ObjectRegister<Descriptor>::ObjectRegister() : index(0), descriptor(0) { // Nothing to do } template <class Descriptor> ObjectRegister<Descriptor>::ObjectRegister(int x) : index(x) { assert((unsigned) x < descriptorList.size()); descriptor = &descriptorList[x]; } template <class Descriptor> ObjectRegister<Descriptor> & ObjectRegister<Descriptor>::operator = (const ObjectRegister<Descriptor> &d) { index = d.index; descriptor = d.descriptor; return *this; } template <class Descriptor> ObjectRegister<Descriptor> &ObjectRegister<Descriptor>::operator = (int x) { assert((unsigned) x < descriptorList.size()); index = x; descriptor = &descriptorList[x]; return *this; } template <class Descriptor> void ObjectRegister<Descriptor>::reset() { descriptorList.reset(); } template <class Descriptor> int ObjectRegister<Descriptor>::next() { if ((unsigned) (index + 1) >= descriptorList.size()) { return 0; } index++; descriptor = &descriptorList[index]; return 1; } template <class Descriptor> unsigned ObjectRegister<Descriptor>::count() { return descriptorList.size(); } /* template <class Descriptor> Descriptor *ObjectRegister<Descriptor>::operator -> () const { return descriptor; } */ template <class Descriptor> int KeyedObjectRegister<Descriptor>::Tree::compare(const int &x, const int &y) const { //LOGSECTION("KeyedObjectRegister::Tree::compare"); unsigned size = KeyedObjectRegister<Descriptor>::descriptorList.size(); const Descriptor &dx = (unsigned) x < size ? KeyedObjectRegister<Descriptor>::descriptorList[x] : *KeyedObjectRegister<Descriptor>::testObject; const Descriptor &dy = (unsigned) y < size ? KeyedObjectRegister<Descriptor>::descriptorList[y] : *KeyedObjectRegister<Descriptor>::testObject; int flag = dx < dy ? -1 : dy < dx; //LOGV(x) LCV(y) LCV(flag); return flag; } template <class Descriptor> KeyedObjectRegister<Descriptor>::KeyedObjectRegister(const Descriptor &d) { //LOGSECTION("KeyedObjectRegister::KeyedObjectRegister"); testObject = &d; unsigned size = KeyedObjectRegister<Descriptor>::descriptorList.size(); KeyedObjectRegister<Descriptor>::index = size; //LOGV(index); if (tree.identify(KeyedObjectRegister<Descriptor>::index)) { KeyedObjectRegister<Descriptor>::descriptor = &KeyedObjectRegister<Descriptor>::descriptorList[ KeyedObjectRegister<Descriptor>::index ]; return; } KeyedObjectRegister<Descriptor>::descriptorList.push(d); KeyedObjectRegister<Descriptor>::descriptor = & KeyedObjectRegister<Descriptor>::descriptorList.top(); } template <class Descriptor> KeyedObjectRegister<Descriptor>::KeyedObjectRegister() : ObjectRegister<Descriptor>() { // Nothing to do } template <class Descriptor> KeyedObjectRegister<Descriptor>::KeyedObjectRegister(unsigned x) : ObjectRegister<Descriptor>(x) { // Nothing to do } template <class Descriptor> typename KeyedObjectRegister<Descriptor>::Tree KeyedObjectRegister<Descriptor>::tree; template <class Descriptor> void KeyedObjectRegister<Descriptor>::reset() { tree.reset(); KeyedObjectRegister<Descriptor>::descriptorList.reset(); } template <class Descriptor> const Descriptor *KeyedObjectRegister<Descriptor>::testObject = 0; template <class Descriptor> Each<Descriptor>::Each(int x) { Each<Descriptor>::index = x; Each<Descriptor>::descriptor = ( (unsigned) Each<Descriptor>::index < Each<Descriptor>::descriptorList.size() ) ? &Each<Descriptor>::descriptorList[Each<Descriptor>::index] : 0; } template <class Descriptor> void Each<Descriptor>::restart(int x) { Each<Descriptor>::index = x; Each<Descriptor>::descriptor = ((unsigned) Each<Descriptor>::index < Each<Descriptor>::descriptorList.size()) ? &Each<Descriptor>::descriptorList[Each<Descriptor>::index] : 0; } template <class Descriptor> void Each<Descriptor>::getNext() { Each<Descriptor>::index++; Each<Descriptor>::descriptor = ((unsigned) Each<Descriptor>::index < Each<Descriptor>::descriptorList.size()) ? &Each<Descriptor>::descriptorList[Each<Descriptor>::index] : 0; } #endif /* REGISTER_IMP_H */