30 for (i = 1; i <=
n; i++) {
53 for (i =
n - p + 2; i <=
n; i++) {
82 for (i = a; i > b; --i) {
86 for (i = 1; i <= (a - b); ++i) {
123 for (i = 0; i < length; i++) {
128 return ((i == length) ? -1 : i);
138 vector = malloc(
sizeof(
Vector));
140 errormsg1(
"Vector_Alloc",
"outofmem",
"out of memory space");
143 vector->
Size = length;
166 V->
p = realloc(V->
p, newlength *
sizeof(
Value));
168 errormsg1(
"Vector_Realloc",
"outofmem",
"out of memory space");
173 for (
int i = V->
Size; i < newlength; i++) {
203 fprintf(Dst,
"%d\n", length = vector->
Size);
205 for (i = 0; i < length; i++) {
226 scanf(
"%d", &length);
229 errormsg1(
"Vector_Read",
"outofmem",
"out of memory space");
233 for (i = 0; i < length; i++) {
234 int r = scanf(
"%ms", &
s);
236 errormsg1(
"Vector_Read",
"hi, Mathematica",
"scanf at line 231 failed");
252 for (i = 0; i < length; i++) {
267 for (i = 0; i < length; i++) {
284 for (i = 0; i < length; i++)
296 Value *cp1, *cp2, *cp3;
302 for (i = 0; i < length; i++) {
318 Value *cp1, *cp2, *cp3;
324 for (i = 0; i < length; i++) {
340 Value *cp1, *cp2, *cp3;
346 for (i = 0; i < length; i++) {
367 for (i = 0; i < length; i++) {
384 for (i = 0; i < length; i++)
395 for (i = 0; i < len; ++i)
410 for (i = 1; i < length; i++)
426 for (i = 1; i < length; i++) {
444 for (i = 1; i < length; i++) {
461 for (i = 0; i < length; i++) {
477 for (i = 0; i < length; ++i)
503 for (i = i + 1; i < length; i++) {
521 int i, Not_Zero, Index_Min = 0;
526 for (i = 0; i < length; i++)
532 for (cq = q, i = 0; i < length; i++) {
545 for (i = 0; i < length; i++, cq++)
546 if (i != Index_Min) {
557 for (i = 0; i < length; i++)
569 Value *cp1, *cp2, *cp3;
575 for (i = 0; i < length; i++) {
633 for (i = 1; i < length; i++) {
648 Value *left_son, *right_son;
652 for (i = (
n - 1) / 2; i >= 0; i--) {
659 while (j <= (
n - 1) / 2) {
660 current_node = vector + j;
661 left_son = vector + (j << 1) + 1;
664 if ((j << 1) + 2 >=
n) {
673 right_son = left_son + 1;
674 if (
value_lt(*right_son, *left_son)) {
691 for (i =
n - 1; i > 0; i--) {
700 current_node = vector + j;
701 left_son = vector + (j << 1) + 1;
704 if ((j << 1) + 2 >= i) {
713 right_son = left_son + 1;
714 if (
value_lt(*right_son, *left_son)) {
785#define MAX_CACHE_SIZE 50
793#ifdef THREAD_SAFE_POLYLIB
797static pthread_once_t once_cache = PTHREAD_ONCE_INIT;
798static pthread_key_t cache_key;
800#define cache_size (cache[MAX_CACHE_SIZE].size)
807 assert(pthread_setspecific(cache_key,
cache) == 0);
810static void free_local_cache(
void *c) { free(c); }
811static void init_value_caches(
void) {
812 pthread_key_create(&cache_key, free_local_cache);
830#ifdef THREAD_SAFE_POLYLIB
831 assert(pthread_once(&once_cache, init_value_caches) == 0);
834 cache = allocate_local_cache();
840 if (
cache[i].size >= want) {
865 for (i = *got; i < want; ++i)
878#ifdef THREAD_SAFE_POLYLIB
885 (
cache = pthread_getspecific(cache_key)) != NULL);
895 for (i = 0; i < size; i++)
905#ifdef THREAD_SAFE_POLYLIB
906 assert(pthread_once(&once_cache, init_value_caches) == 0);
908 if ((
cache = pthread_getspecific(cache_key)) == NULL)
910 pthread_key_delete(cache_key);
921#ifdef THREAD_SAFE_POLYLIB
923 pthread_key_delete(cache_key);
#define value_oppose(ref, val)
#define value_maximum(ref, val1, val2)
#define value_pdivision(ref, val1, val2)
#define value_orto(ref, val1, val2)
#define value_swap(v1, v2)
#define value_notzero_p(val)
#define value_divexact(ref, val1, val2)
#define value_notone_p(val)
#define value_absolute(ref, val)
#define value_zero_p(val)
#define value_assign(v1, v2)
#define value_set_si(val, i)
#define value_addmul(ref, val1, val2)
#define value_minimum(ref, val1, val2)
#define value_read(val, str)
#define value_division(ref, val1, val2)
#define value_multiply(ref, val1, val2)
#define value_print(Dst, fmt, val)
#define value_modulus(ref, val1, val2)
#define value_subtract(ref, val1, val2)
#define value_addto(ref, val1, val2)
void errormsg1(const char *f, const char *msgname, const char *msg)
Value * value_alloc(int want, int *got)
void Vector_Free(Vector *vector)
void Vector_Scale(Value *p1, Value *p2, Value lambda, unsigned length)
void Vector_Print(FILE *Dst, const char *Format, Vector *vector)
void Vector_Set(Value *p, int n, unsigned length)
void Inner_Product(Value *p1, Value *p2, unsigned length, Value *ip)
void value_free(Value *p, int size)
void Vector_Normalize_Positive(Value *p, int length, int pos)
void Gcd(Value a, Value b, Value *result)
void Vector_Combine(Value *p1, Value *p2, Value *p3, Value lambda, Value mu, unsigned length)
cache_holder cache[MAX_CACHE_SIZE]
Vincent's patch for thread safe value cache.
int Vector_IsZero(Value *v, unsigned length)
void Vector_Max(Value *p, unsigned length, Value *max)
void Factorial(int n, Value *fact)
void Vector_Gcd(Value *p, unsigned length, Value *min)
void Vector_Exchange(Value *p1, Value *p2, unsigned length)
void Vector_AntiScale(Value *p1, Value *p2, Value lambda, unsigned length)
void Vector_Add(Value *p1, Value *p2, Value *p3, unsigned length)
void Vector_Sub(Value *p1, Value *p2, Value *p3, unsigned length)
void Vector_Reduce(Value *p, unsigned length, void(*f)(Value, Value *), Value *r)
void Vector_Normalize(Value *p, unsigned length)
int Vector_Equal(Value *Vec1, Value *Vec2, unsigned length)
void Vector_Min_Not_Zero(Value *p, unsigned length, int *index, Value *min)
void Vector_Sort(Value *vector, unsigned n)
Vector * Vector_Alloc(unsigned length)
void Vector_Copy(Value *p1, Value *p2, unsigned length)
int First_Non_Zero(Value *p, unsigned length)
void Vector_Map(Value *p1, Value *p2, Value *p3, unsigned length, Value *(*f)(Value, Value))
void CNP(int a, int b, Value *result)
void Vector_Oppose(Value *p1, Value *p2, unsigned len)
int ConstraintSimplify(Value *old, Value *newp, int len, Value *v)
void Binomial(int n, int p, Value *result)
Vector * Vector_Realloc(Vector *V, unsigned newlength)
void Vector_Min(Value *p, unsigned length, Value *min)
void Vector_Or(Value *p1, Value *p2, Value *p3, unsigned length)