00001 #ifndef _ccaiter_h
00002 #define _ccaiter_h
00003
00004 #include <chemistry/qc/basis/cartiter.h>
00005
00006 namespace MPQC {
00007
00008 class CartesianIterCCA : public sc::CartesianIter {
00009 int *avec, *bvec, *cvec;
00010 public:
00011 CartesianIterCCA(int l) : CartesianIter(l) {}
00012 void start() {
00013 bfn_=b_=c_=0;
00014 a_=l_;
00015 }
00016 void next() {
00017 if (c_ < l_ - a_) {
00018 b_--;
00019 c_++;
00020 }
00021 else {
00022 a_--;
00023 c_ = 0;
00024 b_ = l_ - a_;
00025 }
00026 bfn_++;
00027 }
00028 operator int() {
00029 return (a_ >= 0);
00030 }
00031 };
00032
00033 }
00034
00035 #endif