// Class for creating and outputting palindrome constants

#include "palindromic.h"
#include <math.h>

void Palindromic::setData() {
	int counter;

	cl_I cbase = base;

	cl_I upper, lower, current_constant;

	lower = 1;

	for (counter = 0; counter < variables; counter++) {

		if (digits-1-counter == 0) upper = 1;
		else	upper = expt_pos(base, digits-1-counter);

		if (upper != lower)	current_constant = upper+lower; 
		else			current_constant = upper;

		lower = lower * cbase;

		constants[counter] = current_constant;
	}
}

Palindromic::Palindromic(int i_base, int i_digits) {
	variables = (int) ceil(i_digits * 0.5);	// since it is symmetric
	constants = new cl_I[variables];
	digits = i_digits;
	base = i_base;

	setData();
}

int Palindromic::getBase() { return(base); }
int Palindromic::getDigits() { return(digits); }
int Palindromic::getNumVars() { return(variables); }

cl_I * Palindromic::getConstant(int number) {
	if (number < 0 || number >= variables) return(NULL);
	return(&constants[number]);
}
