summaryrefslogtreecommitdiffstats
path: root/src/ml/dlib/dlib/graph_utils/sample_pair_abstract.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/ml/dlib/dlib/graph_utils/sample_pair_abstract.h')
-rw-r--r--src/ml/dlib/dlib/graph_utils/sample_pair_abstract.h192
1 files changed, 192 insertions, 0 deletions
diff --git a/src/ml/dlib/dlib/graph_utils/sample_pair_abstract.h b/src/ml/dlib/dlib/graph_utils/sample_pair_abstract.h
new file mode 100644
index 000000000..3306899e3
--- /dev/null
+++ b/src/ml/dlib/dlib/graph_utils/sample_pair_abstract.h
@@ -0,0 +1,192 @@
+// Copyright (C) 2010 Davis E. King (davis@dlib.net)
+// License: Boost Software License See LICENSE.txt for the full license.
+#undef DLIB_SAMPLE_PaIR_ABSTRACT_Hh_
+#ifdef DLIB_SAMPLE_PaIR_ABSTRACT_Hh_
+
+#include <limits>
+#include "../serialize.h"
+
+namespace dlib
+{
+
+// ----------------------------------------------------------------------------------------
+
+ class sample_pair
+ {
+ /*!
+ WHAT THIS OBJECT REPRESENTS
+ This object is intended to represent an edge in an undirected graph
+ which has data samples at its vertices. So it contains two integers
+ (index1 and index2) which represent the identifying indices of
+ the samples at the ends of an edge. Note that this object enforces
+ the constraint that index1 <= index2. This has the effect of
+ making the edges undirected since a sample_pair is incapable
+ of representing a single edge in more than one way. That is,
+ sample_pair(i,j) == sample_pair(j,i) for any value of i and j.
+
+ This object also contains a double which can be used for any purpose.
+ !*/
+
+ public:
+ sample_pair(
+ );
+ /*!
+ ensures
+ - #index1() == 0
+ - #index2() == 0
+ - #distance() == 1
+ !*/
+
+ sample_pair (
+ const unsigned long idx1,
+ const unsigned long idx2
+ );
+ /*!
+ ensures
+ - #index1() == min(idx1,idx2)
+ - #index2() == max(idx1,idx2)
+ - #distance() == 1
+ !*/
+
+ sample_pair (
+ const unsigned long idx1,
+ const unsigned long idx2,
+ const double dist
+ );
+ /*!
+ ensures
+ - #index1() == min(idx1,idx2)
+ - #index2() == max(idx1,idx2)
+ - #distance() == dist
+ !*/
+
+ const unsigned long& index1 (
+ ) const;
+ /*!
+ ensures
+ - returns the first index value stored in this object
+ !*/
+
+ const unsigned long& index2 (
+ ) const;
+ /*!
+ ensures
+ - returns the second index value stored in this object
+ !*/
+
+ const double& distance (
+ ) const;
+ /*!
+ ensures
+ - returns the floating point number stored in this object
+ !*/
+
+ };
+
+// ----------------------------------------------------------------------------------------
+
+ template <typename T>
+ bool order_by_index (
+ const T& a,
+ const T& b
+ ) { return a.index1() < b.index1() || (a.index1() == b.index1() && a.index2() < b.index2()); }
+ /*!
+ requires
+ - T is a type with an interface compatible with sample_pair.
+ ensures
+ - provides a total ordering of sample_pair objects that will cause pairs that are
+ equal to be adjacent when sorted. So for example, this function can be used
+ with std::sort() to first sort a sequence of sample_pair objects and then
+ find duplicate edges.
+ !*/
+
+ template <typename T>
+ bool order_by_distance (
+ const T& a,
+ const T& b
+ ) { return a.distance() < b.distance(); }
+ /*!
+ requires
+ - T is a type with an interface compatible with sample_pair.
+ ensures
+ - provides a total ordering of sample_pair objects that causes pairs with
+ smallest distance to be the first in a sorted list. This function can be
+ used with std::sort().
+ !*/
+
+ template <typename T>
+ bool order_by_descending_distance (
+ const T& a,
+ const T& b
+ ) { return a.distance() > b.distance(); }
+ /*!
+ requires
+ - T is a type with an interface compatible with sample_pair.
+ ensures
+ - provides a total ordering of sample_pair objects that causes pairs with
+ largest distance to be the first in a sorted list. This function can be
+ used with std::sort().
+ !*/
+
+ template <typename T>
+ bool order_by_distance_and_index (
+ const T& a,
+ const T& b
+ ) { return a.distance() < b.distance() || (a.distance() == b.distance() && order_by_index(a,b)); }
+ /*!
+ requires
+ - T is a type with an interface compatible with sample_pair.
+ ensures
+ - provides a total ordering of sample_pair objects that causes pairs with
+ smallest distance to be the first in a sorted list but also orders samples
+ with equal distances according to order_by_index(). This function can be
+ used with std::sort().
+ !*/
+
+// ----------------------------------------------------------------------------------------
+
+ inline bool operator == (
+ const sample_pair& a,
+ const sample_pair& b
+ );
+ /*!
+ ensures
+ - returns a.index1() == b.index1() && a.index2() == b.index2();
+ I.e. returns true if a and b both represent the same pair and false otherwise.
+ Note that the distance field is not involved in this comparison.
+ !*/
+
+ inline bool operator != (
+ const sample_pair& a,
+ const sample_pair& b
+ );
+ /*!
+ ensures
+ - returns !(a == b)
+ !*/
+
+// ----------------------------------------------------------------------------------------
+
+ inline void serialize (
+ const sample_pair& item,
+ std::ostream& out
+ );
+ /*!
+ provides serialization support
+ !*/
+
+ inline void deserialize (
+ sample_pair& item,
+ std::istream& in
+ );
+ /*!
+ provides deserialization support
+ !*/
+
+// ----------------------------------------------------------------------------------------
+
+}
+
+#endif // DLIB_SAMPLE_PaIR_ABSTRACT_Hh_
+
+