utils

© 2006,2014,2017,2020 John Abbott, Anna M. Bigatti

GNU Free Documentation License, Version 1.2

CoCoALib Documentation Index

User documentation for file utils.H

This file defines a few very basic functions which I feel should really be part of the standard C++. Nevertheless I have placed all definitions inside the namespace CoCoA. Here is a summary:

  • round(x) -- round x (of type double) to nearest integer value (of type double); halves round towards +infinity.

  • ULongDiff(hi,lo) -- computes hi-lo as unsigned long (assumes hi>=lo)

  • LongRange(lo,hi) -- returns a vector<long> filled with lo,lo+1,...,hi (useful for submat)

  • IsDecimal(strm) -- returns true is i/o stream strm is in decimal mode, o/w returns false

  • MaxSquarableInteger<T>() -- returns largest integer whose square fits in type T

  • fold(str, n) -- make a copy of the string str inserting a newline every n chars

  • len(v) -- same as v.size() except that result is long rather than size_t

Maintainer documentation for files utils.H

Everything is in utils.H; the functions are all so simple that they can be implemented inline.

Impl of template fn MaxSquarableInteger uses GMP to compute the memorized values. A table of constants would be faster but potentially less portable (given that CoCoALib requires GMP anyway). I haven't yet found a neat way of ensuring that the type T is integral & bounded.

Bugs, Shortcomings and other ideas

A possibly better idea for MaxSquarableInteger: precompute 2^63*sqrt(2) as unsigned long, then simply right shift this value for integral types with less than 127 bits. This suggestion presupposes a binary computer.

Main changes

2017

  • February (v0.99543): added round; removed DeleteObject and cmp template fn.
  • date of first release not noted