コード例 #1
0
ファイル: function_ref.cpp プロジェクト: TyRoXx/protolang0
	std::size_t hash<p0::intermediate::function_ref>::operator()(const p0::intermediate::function_ref &ref) const
	{
		auto const pair = to_pair(ref);
		//unfortunately, std::hash is not specialized for std::pair,
		//so we use boost here
		return boost::hash_value(pair);
	}
コード例 #2
0
ファイル: value.cpp プロジェクト: TyRoXx/protolang0
		comparison_result::Enum compare(
				intermediate::function_ref const &left,
				intermediate::function_ref const &right)
		{
			auto const left_pair = to_pair(left);
			auto const right_pair = to_pair(right);
			if (left_pair < right_pair)
			{
				return comparison_result::less;
			}
			else if (left_pair > right_pair)
			{
				return comparison_result::greater;
			}
			return comparison_result::equal;
		}
コード例 #3
0
ファイル: startup.c プロジェクト: cggong/iu_c311
void print_pair(ptr x) {
  pair* p = to_pair(x);
  print_ptr_rec(p->car);
  if (is_pair(p->cdr)) {
    printf(" ");
    print_pair(p->cdr);
  } else if (is_null(p->cdr)) {
    /*pass*/
  } else {
    printf(" . ");
    print_ptr_rec(p->cdr);
  }
}
コード例 #4
0
 struct point { T x, y; };ttt point<T> operator + (pca a, pca b) { return { a.x+b.x, a.y+b.y }; }ttt point<T> operator - (pca a, pca b) { return { a.x-b.x, a.y-b.y }; }ttt point<T> operator - (pca a) { return { -a.x, -a.y }; }ttt point<T> operator * (T a, pca b) { return { a*b.x, a*b.y }; }ttt std::pair<T,T> to_pair(pca a) { return { a.x, a.y }; }ttt bool operator == (pca a, pca b) { return to_pair(a) == to_pair(b); }ttt bool operator != (pca a, pca b) { return to_pair(a) != to_pair(b); }ttt bool operator <  (pca a, pca b) { return to_pair(a) <  to_pair(b); }ttt bool operator <= (pca a, pca b) { return to_pair(a) <= to_pair(b); }ttt bool operator >= (pca a, pca b) { return to_pair(a) >= to_pair(b); }ttt bool operator >  (pca a, pca b) { return to_pair(a) >  to_pair(b); }ttt T length_squared(pca p) { return p.x*p.x + p.y*p.y; }ttt double length(pca p) { return sqrt(length_squared(p)); }ttt point<T> normalized(pca a) { return (1 / length(a)) * a; }ttt T   dot(pca p, pca q) { return p.x * q.x + p.y * q.y; }ttt T cross(pca p, pca q) { return p.x * q.y - p.y * q.x; }ttt int ccw(pca a, pca b, pca c) { T x = cross(b - a, c - a); return x > 0 ? 1 : x < 0 ? -1 : 0; }
コード例 #5
0
ファイル: function_ref.cpp プロジェクト: TyRoXx/protolang0
		bool operator < (function_ref const &left, function_ref const &right)
		{
			//make std::pair do the work
			return to_pair(left) < to_pair(right);
		}
コード例 #6
0
ファイル: function_ref.cpp プロジェクト: TyRoXx/protolang0
		bool operator == (function_ref const &left, function_ref const &right)
		{
			return to_pair(left) == to_pair(right);
		}
コード例 #7
0
 struct point { T x, y; };ttt point<T> operator + (cpa a, cpa b) { return { a.x+b.x, a.y+b.y }; }ttt point<T> operator - (cpa a, cpa b) { return { a.x-b.x, a.y-b.y }; }ttt point<T> operator - (cpa a) { return { -a.x, -a.y }; }ttt point<T> operator * (T a, cpa b) { return { a*b.x, a*b.y }; }ttt std::pair<T,T> to_pair(cpa a) { return { a.x, a.y }; }ttt bool operator == (cpa a, cpa b) { return to_pair(a) == to_pair(b); }ttt bool operator != (cpa a, cpa b) { return to_pair(a) != to_pair(b); }ttt bool operator <  (cpa a, cpa b) { return to_pair(a) <  to_pair(b); }ttt bool operator <= (cpa a, cpa b) { return to_pair(a) <= to_pair(b); }ttt bool operator >= (cpa a, cpa b) { return to_pair(a) >= to_pair(b); }ttt bool operator >  (cpa a, cpa b) { return to_pair(a) >  to_pair(b); }ttt T length_squared(cpa p) { return p.x*p.x + p.y*p.y; }ttt double length(cpa p) { return sqrt(length_squared(p)); }ttt T   dot(cpa p, cpa q) { return p.x * q.x + p.y * q.y; }ttt T cross(cpa p, cpa q) { return p.x * q.y - p.y * q.x; }ttt int ccw(cpa a, cpa b, cpa c) { double x = cross(b - a, c - a); return x > 0 ? 1 : x < 0 ? -1 : 0; }