#include <amsmathutil25/amsmathutil25.hpp>

namespace ams
{

template<> void amsarray<int>::print(bool newline,int printstyle)
{
    amsarray_size_t I;
    printf("{");
    if(data!=NULL)
    {
        for(I=0;I<length-1;I++)
        {
            printf("%d,",data[I]);
        }
        if(length>0) printf("%d",data[length-1]);
    }
    printf("}");
    if(newline==1) printf("\n");

    return;
}

template<> void amsarray<long>::print(bool newline,int printstyle)
{
    amsarray_size_t I;

    printf("{");
    if(data!=NULL)
    {
        for(I=0;I<length-1;I++)
        {
            printf("%ld,",data[I]);
        }
        if(length>0) printf("%ld",data[length-1]);
    }
    printf("}");
    if(newline==1) printf("\n");

    return;
}

template<> void amsarray<float>::print(bool newline,int printstyle)
{
    amsarray_size_t I;
    printf("{");
    if(data!=NULL)
    {
        for(I=0;I<length-1;I++)
        {
            printf("%1.3f,",data[I]);
        }
        if(length>0) printf("%1.3f",data[length-1]);
    }
    printf("}");
    if(newline==1) printf("\n");

    return;
}

template<> void amsarray<double>::print(bool newline,int printstyle)
{
    amsarray_size_t I;
    printf("{");
    if(data!=NULL)
    {
        for(I=0;I<length-1;I++)
        {
            printf("%1.3f,",data[I]);
        }
        if(length>0) printf("%1.3f",data[length-1]);
    }
    printf("}");
    if(newline==1) printf("\n");

    return;
}

void _debug_amsarray_print(amsarray<long> *array, bool newline,int printstyle)
{
    amsarray_size_t I;

    printf("{");
    if(array->data!=NULL)
    {
        for(I=0;I<array->length-1;I++)
        {
            printf("%ld,",array->data[I]);
        }
        if(array->length>0) printf("%ld",array->data[array->length-1]);
    }
    printf("}");
    if(newline==1) printf("\n");

    return;
}


void _debug_amsarray_print(amsarray<double> *array, bool newline,int printstyle)
{
    amsarray_size_t I;

    printf("{");
    if(array->data!=NULL)
    {
        for(I=0;I<array->length-1;I++)
        {
            printf("%1.4f,",array->data[I]);
        }
        if(array->length>0) printf("%1.4f",array->data[array->length-1]);
    }
    printf("}");
    if(newline==1) printf("\n");

    return;
}

// Explicit Class Instantiations?
// template class amsarray<int>; 
// template class amsarray<float>; 
// template class amsarray<int64_t>; 
// template class amsarray<double>; 

};