32#ifndef _chemistry_qc_basis_transform_h
33#define _chemistry_qc_basis_transform_h
44 int a_, b_, c_, cartindex_, pureindex_;
48 int a()
const {
return a_; }
50 int b()
const {
return b_; }
52 int c()
const {
return c_; }
58 double coef()
const {
return coef_; }
75class SphericalTransform {
100 virtual ~SphericalTransform();
106 int cartindex(
int i)
const {
return components_[i].cartindex(); }
108 int pureindex(
int i)
const {
return components_[i].pureindex(); }
110 double coef(
int i)
const {
return components_[i].coef(); }
112 int a(
int i)
const {
return components_[i].a(); }
114 int b(
int i)
const {
return components_[i].b(); }
116 int c(
int i)
const {
return components_[i].c(); }
118 int l()
const {
return l_; }
120 int n()
const {
return n_; }
128class ISphericalTransform:
public SphericalTransform {
130 ISphericalTransform();
131 ISphericalTransform(
int l,
int subl=-1);
138class SphericalTransformIter {
146 SphericalTransformIter();
149 void begin() { i_ = 0; }
150 void start() { begin(); }
151 void next() { i_++; }
152 int ready() {
return i_ < transform_->n(); }
153 operator int() {
return ready(); }
154 int l() {
return transform_->l(); }
155 int cartindex() {
return transform_->cartindex(i_); }
156 int pureindex() {
return transform_->pureindex(i_); }
157 int bfn() {
return pureindex(); }
158 double coef() {
return transform_->coef(i_); }
159 int a() {
return transform_->a(i_); }
160 int b() {
return transform_->b(i_); }
161 int c() {
return transform_->c(i_); }
162 int l(
int i) {
return i?(i==1?b():c()):a(); }
163 int n() {
return 2*l() + 1; }