Next: , Up: Programming


4.1 Data types

Asymptote supports the following data types (in addition to user-defined types):

void
The void type is used only by functions that take or return no arguments.
bool
a boolean type that can only take on the values true and false. For example:
     
     bool b=true;

defines a boolean variable b and initializes it to the value true. If no initializer is given:

     
     bool b;

the value false is assumed.

int
an integer type; if no initializer is given, the implicit value 0 is assumed.
real
a real number; this should be set to the highest-precision native floating-point type on the architecture. The implicit initializer for type real is 0.0.
pair
complex number, that is, an ordered pair of real components (x,y). The real and imaginary parts of a pair z can read as z.x and z.y. We say that x and y are virtual members of the data element pair; they cannot be directly modified, however. The implicit initializer for type pair is (0.0,0.0).

There are a number of ways to take the complex conjugate of a pair:

          pair z=(3,4);
          z=(z.x,-z.y);
          z=z.x-I*z.y;
          z=conj(z);
     

A number of built-in functions are defined for pairs:

pair conj(pair z)
returns the conjugate of z;
real length(pair z)
returns the complex modulus |z| of its argument z. For example,
               pair z=(3,4);
               write(length(z));
          

produces the result 5. A synonym for length(pair) is abs(pair);

real angle(pair z)
returns the angle of z in radians in the interval [-pi,pi];
real degrees(pair z)
returns the angle of z in degrees in the interval [0,360);
real Degrees(pair z)
returns the angle of z in degrees in the interval [0,360), or 0 if z.x=z.y=0 (rather than producing an error);
pair unit(pair z)
returns a unit vector in the direction of the pair z;
pair expi(real angle)
returns a unit vector in the direction angle measured in radians;
pair dir(real angle)
returns a unit vector in the direction angle measured in degrees;
real xpart(pair z)
returns z.x;
real ypart(pair z)
returns z.y;
real dot(pair z, pair w)
returns the dot product z.x*z.x+z.y*z.y;
pair minbound(pair z, pair w)
returns (min(z.x,w.x),min(z.y,w.y));
pair maxbound(pair z, pair w)
returns (max(z.x,w.x),max(z.y,w.y)).

triple
an ordered triple of real components (x,y,z) used for three-dimensional drawings. The respective components of a triple v can read as v.x, v.y, and v.z.

Here are the built-in functions for triples:

real length(triple v)
returns the length |v| of the vector v. A synonym for length(triple) is abs(triple);
real polar(triple v)
returns the colatitude of v measured from the z axis in radians;
real azimuth(triple v)
returns the longitude of v measured from the x axis in radians;
real colatitude(triple v)
returns the colatitude of v measured from the z axis in degrees;
real latitude(triple v)
returns the latitude of v measured from the xy plane in degrees;
real longitude(triple v)
returns the longitude of v measured from the x axis in degrees;
real Longitude(triple v)
returns the longitude of v in degrees, or 0 if v.x=v.y=0 (rather than producing an error);
triple unit(triple v)
returns a unit triple in the direction of the triple v;
triple expi(real colatitude, real longitude)
returns a unit triple in the direction (colatitude,longitude) measured in radians;
triple dir(real colatitude, real longitude)
returns a unit triple in the direction (colatitude,longitude) measured in degrees;
real xpart(triple v)
returns v.x;
real ypart(triple v)
returns v.y;
real zpart(triple v)
returns v.z;
real dot(triple u, triple v)
returns the dot product u.x*v.x+u.y*v.y+u.z*v.z;
triple cross(triple u, triple v)
returns the cross product

(u.y*v.z-u.z*v.y,u.z*v.x-u.x*v.z,u.x*v.y-v.x*u.y);

triple minbound(triple u, triple v)
returns (min(u.x,v.x),min(u.y,v.y),min(u.z,v.z));
triple maxbound(triple u, triple v)
returns (max(u.x,v.x),max(u.y,v.y),max(u.z,v.z)).

string
a character string, implemented using the STL string class.

Strings delimited by double quotes (") are subject to the following mapping to allow the use of double quotes in TeX (e.g. for using the babel package, see babel):

Strings delimited by single quotes (') have the same mappings as character strings in ANSI C:

The implicit initializer for type string is the empty string "". In the following string functions, position 0 denotes the start of the string.

int length(string s)
returns the length of the string s;


int find(string s, string t, int pos=0)
returns the position of the first occurrence of string t in string s at or after position pos, or -1 if t is not a substring of s;


int rfind(string s, string t, int pos=-1)
returns the position of the last occurrence of string t in string s at or before position pos (if pos=-1, at the end of the string s), or -1 if t is not a substring of s;


string insert(string s, int pos, string t)
return the string formed by inserting string t at position pos in s;


string erase(string s, int pos, int n)
returns the string formed by erasing the string of length n (if n=-1, to the end of the string s) at position pos in s;


string substr(string s, int pos, int n=-1)
returns the substring of s starting at position pos and of length n (if n=-1, until the end of the string s);


string reverse(string s)
return the string formed by reversing string s;
string replace(string s, string before, string after)
returns a string with all occurrences of the string before in the string s changed to the string after;
string replace(string s, string[][] table)
returns a string constructed by translating in string s all occurrences of the string before in an array table of string pairs {before,after} to the corresponding string after;


string format(string s, int n)
returns a string containing n formatted according to the C-style format string s;
string format(string s, real x)
returns a string containing x formatted according to the C-style format string s (see the documentation for the C-function fprintf), except that only one data field is allowed, trailing zeros are removed by default (unless # is specified) and TeX is used to typeset scientific notation;
string time(string s)
returns the current time formatted by the ANSI C routine strftime according to the string s. For example,
          
          write(time("%a %b %d %H:%M:%S %Z %Y"));
     

outputs the time in the default format of the UNIX date command.

As in C/C++, complicated types may be abbreviated with typedef (see the example in Functions).