Add additional instantiations in Instantiations.cpp
authorAdam Simpkins <simpkins@fb.com>
Fri, 16 Jan 2015 02:35:56 +0000 (18:35 -0800)
committerwoo <woo@fb.com>
Mon, 2 Feb 2015 21:12:23 +0000 (13:12 -0800)
Summary:
Histogram::getPercentileBucketIdx() and getPercentileEstimate() are
implemented using template methods of HistogramBuckets.

This updates Instantiations.cpp to also instantiate the versions of
these template methods that are required by Histogram<int64_t>.  Without
this, anyone using these methods was required to also include
Histogram-defs.h, or otherwise they may get link errors.  This makes it
so they no longer need to include Histogram-defs.h

The C++ syntax required is pretty horrendous.  We could potentially
avoid this by refactoring the code so that these methods are no longer
templates (and require that the Bucket class provide methods for this
purpose).  At the moment adding instantiations seems simpler, and
doesn't change any public APIs.

Test Plan:
Successfully linked code using
Histogram<int64_t>::getPercentileEstimate() without including
Histogram-defs.h

Reviewed By: ldbrandy@fb.com, meyering@fb.com

Subscribers: trunkagent, doug, net-systems@, exa, folly-diffs@

FB internal diff: D1786346

Signature: t1:1786346:1421429734:da17b7ea326c64a1e158fec3b87dc49c3db3d848

folly/stats/Instantiations.cpp

index 2b6f926d1865f2a24ef5f988c1477b23050054c8..cc35b678f060459cb1c092d2e0482e1c81637d98 100644 (file)
@@ -41,4 +41,22 @@ template class detail::HistogramBuckets<int64_t, Histogram<int64_t>::Bucket>;
 template class MultiLevelTimeSeries<int64_t>;
 template class TimeseriesHistogram<int64_t>;
 
+// Histogram::getPercentileBucketIdx() and Histogram::getPercentileEstimate()
+// are implemented using template methods.  Instantiate the default versions of
+// these methods too, so anyone using them won't also need to explicitly
+// include Histogram-defs.h
+template unsigned int detail::HistogramBuckets<
+  int64_t, Histogram<int64_t>::Bucket>::
+  getPercentileBucketIdx<Histogram<int64_t>::CountFromBucket>(
+      double pct,
+      Histogram<int64_t>::CountFromBucket countFromBucket,
+      double* lowPct,
+      double* highPct) const;
+template int64_t detail::HistogramBuckets<int64_t, Histogram<int64_t>::Bucket>
+  ::getPercentileEstimate<Histogram<int64_t>::CountFromBucket,
+                          Histogram<int64_t>::AvgFromBucket>(
+    double pct,
+    Histogram<int64_t>::CountFromBucket countFromBucket,
+    Histogram<int64_t>::AvgFromBucket avgFromBucket) const;
+
 } // folly