<commit_before>// Copyright (c) 2013, <NAME>,  Object Computing, Inc.
// All rights reserved.
//
// This file is part of mFAST.
//
//     mFAST is free software: you can redistribute it and/or modify
//     it under the terms of the GNU Lesser General Public License as published by
//     the Free Software Foundation, either version 3 of the License, or
//     (at your option) any later version.
//
//     mFAST is distributed in the hope that it will be useful,
//     but WITHOUT ANY WARRANTY; without even the implied warranty of
//     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
//     GNU General Public License for more details.
//
//     You should have received a copy of the GNU Lesser General Public License
//     along with mFast.  If not, see <http://www.gnu.org/licenses/>.
//
#ifndef DECIMAL_REF_H_V02M5O0J
#define DECIMAL_REF_H_V02M5O0J

#include <cmath>
#include <cfloat>

#include "mfast/field_ref.h"
#include "mfast/int_ref.h"

#include <boost/multiprecision/cpp_dec_float.hpp>

#if !defined(BOOST_NO_CXX11_EXTERN_TEMPLATE)
extern template class boost::multiprecision::cpp_dec_float<18>;
#elif (defined(__GNUC__) && (__GNUC__ >= 3))
inline template class boost::multiprecision::cpp_dec_float<18>;
#endif

namespace mfast {

typedef boost::multiprecision::cpp_dec_float<18> decimal_backend;
typedef boost::multiprecision::number<decimal_backend> decimal;
class allocator;

namespace detail {
class codec_helper;
}


class exponent_cref
  : public field_cref
{
  public:
    typedef decimal_field_instruction instruction_type;
    typedef const decimal_field_instruction* instruction_cptr;
    typedef int8_t value_type;

    exponent_cref()
    {
    }

    exponent_cref(const value_storage*     storage,
                  const field_instruction* instruction)
      : field_cref(storage, instruction)
    {<commit_msg>Fixed extern template problem in G++<commit_after>// Copyright (c) 2013, <NAME>,  Object Computing, Inc.
// All rights reserved.
//
// This file is part of mFAST.
//
//     mFAST is free software: you can redistribute it and/or modify
//     it under the terms of the GNU Lesser General Public License as published by
//     the Free Software Foundation, either version 3 of the License, or
//     (at your option) any later version.
//
//     mFAST is distributed in the hope that it will be useful,
//     but WITHOUT ANY WARRANTY; without even the implied warranty of
//     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
//     GNU General Public License for more details.
//
//     You should have received a copy of the GNU Lesser General Public License
//     along with mFast.  If not, see <http://www.gnu.org/licenses/>.
//
#ifndef DECIMAL_REF_H_V02M5O0J
#define DECIMAL_REF_H_V02M5O0J

#include <cmath>
#include <cfloat>

#include "mfast/field_ref.h"
#include "mfast/int_ref.h"

#include <boost/multiprecision/cpp_dec_float.hpp>


#if !defined(BOOST_NO_CXX11_EXTERN_TEMPLATE)
#  if  (defined(__GNUC__) && (__GNUC__ >= 3)) && (!defined(__clang__))
// g++ extern template class does not work when the template class has static data members, need to use inline stead.
  namespace boost { namespace multiprecision {
  inline template class cpp_dec_float<18>;
  }}
#  else
  extern template class boost::multiprecision::cpp_dec_float<18>;
#  endif
#endif

namespace mfast {

typedef boost::multiprecision::cpp_dec_float<18> decimal_backend;
typedef boost::multiprecision::number<decimal_backend> decimal;
class allocator;

namespace detail {
class codec_helper;
}


class exponent_cref
  : public field_cref
{
  public:
    typedef decimal_field_instruction instruction_type;
    typedef const decimal_field_instruction* instruction_cptr;
    typedef int8_t value_type;

    exponent_cref()
    {
    }

    exponent_cref(const value_storage*     storage,
                  const field_instruction* instruction)
      : field_cref(storage, instruction)
    {
{'fraction_non_alphanumeric': 0.08862366683595733, 'fraction_numerical': 0.011681056373793804, 'mean_word_length': 3.762998790810157, 'pattern_counts': {'":': 0, '<': 21, '<?xml version=': 0, '>': 23, 'https://': 0, 'lorem ipsum': 0, 'www.': 2, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '5251431', 'n_tokens_mistral': 1231, 'n_tokens_neox': 1188, 'n_words': 396}