<commit_before>/*============================================================================
  KWSys - Kitware System Library
  Copyright 2000-2009 Kitware, Inc., Insight Software Consortium

  Distributed under the OSI-approved BSD License (the "License");
  see accompanying file Copyright.txt for details.

  This software is distributed WITHOUT ANY WARRANTY; without even the
  implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
  See the License for more information.
============================================================================*/

#ifdef __osf__
#  define _OSF_SOURCE
#  define _POSIX_C_SOURCE 199506L
#  define _XOPEN_SOURCE_EXTENDED
#endif

#include "kwsysPrivate.h"
#include KWSYS_HEADER(Encoding.hxx)
#include KWSYS_HEADER(Encoding.h)
#include KWSYS_HEADER(stl/vector)

// Work-around CMake dependency scanning limitation.  This must
// duplicate the above list of headers.
#if 0
# include "Encoding.hxx.in"
# include "Encoding.h.in"
#endif

#include <stdlib.h>
#include <string.h>

#ifdef _MSC_VER
# pragma warning (disable: 4786)
#endif

// Windows API.
#if defined(_WIN32)
# include <windows.h>
#endif

namespace KWSYS_NAMESPACE
{

Encoding::CommandLineArguments
Encoding::CommandLineArguments::Main(int argc, char const* const* argv)
{
#ifdef _WIN32
  (void) argc;
  (void) argv;

  int ac;
  LPWSTR* w_av = CommandLineToArgvW(GetCommandLineW(), &ac);

  std::vector<std::string> av1(ac);
  std::vector<char const*> av2(ac);
  for(int i=0; i<ac; i++)
    {
    av1[i] = ToNarrow(w_av[i]);
    av2[i] = av1[i].c_str();
    }
  LocalFree(w_av);
  return CommandLineArguments(ac, &av2[0]);
#else
  return CommandLineArguments(argc, argv);
#endif
}

Encoding::CommandLineArguments::CommandLineArguments(int ac,
                                                     char const* const* av)
{
  this->argv_.resize(ac+1);
  for(int i=0; i<ac; i++)
    {
    this->argv_[i] = strdup(av[i]);
    }
  this->argv_[ac] = 0;
}

Encoding::CommandLineArguments::CommandLineArguments(int ac,
                                                     wchar_t const* const* av)
{
  this->argv_.resize(ac+1);
  for(int i=0; i<ac; i++)
    {
    this->argv_[i] = kwsysEncoding_DupToNarrow(av[i]);
    }
  this->argv_[ac] = 0;
}

Encoding::CommandLineArguments::~CommandLineArguments()
{
  for(size_t i=0; i<this->argv_.size(); i++)
    {
    free(argv_[i]);
    }
}

Encoding::CommandLineArguments::
  CommandLineArguments(const CommandLineArguments& other)
{
  this->argv_.resize(other.argv_.size());
  for(size_t i=0; i<this->argv_.size(); i++)
    {
    this->argv_[i] = other.argv_[i] ? strdup(other.argv_[i]) : 0;
    }
}

Encoding::CommandLineArguments&
Encoding::CommandLineArguments::operator=(const CommandLineArguments& other)
{
  size_t i;
  for(i=0; i<this->argv_.size(); i++)
    {
    free(this->argv_[i]);
    }

  this->argv_.resize(other.argv_.size());
  for(i=0; i<this->argv_.size(); i++)
    {
    this->argv_[i] = other.argv_[i] ? strdup(other.argv_[i]) : 0;
    }
<commit_msg>Encoding: Add self-assignment check to CommandLineArguments<commit_after>/*============================================================================
  KWSys - Kitware System Library
  Copyright 2000-2009 Kitware, Inc., Insight Software Consortium

  Distributed under the OSI-approved BSD License (the "License");
  see accompanying file Copyright.txt for details.

  This software is distributed WITHOUT ANY WARRANTY; without even the
  implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
  See the License for more information.
============================================================================*/

#ifdef __osf__
#  define _OSF_SOURCE
#  define _POSIX_C_SOURCE 199506L
#  define _XOPEN_SOURCE_EXTENDED
#endif

#include "kwsysPrivate.h"
#include KWSYS_HEADER(Encoding.hxx)
#include KWSYS_HEADER(Encoding.h)
#include KWSYS_HEADER(stl/vector)

// Work-around CMake dependency scanning limitation.  This must
// duplicate the above list of headers.
#if 0
# include "Encoding.hxx.in"
# include "Encoding.h.in"
#endif

#include <stdlib.h>
#include <string.h>

#ifdef _MSC_VER
# pragma warning (disable: 4786)
#endif

// Windows API.
#if defined(_WIN32)
# include <windows.h>
#endif

namespace KWSYS_NAMESPACE
{

Encoding::CommandLineArguments
Encoding::CommandLineArguments::Main(int argc, char const* const* argv)
{
#ifdef _WIN32
  (void) argc;
  (void) argv;

  int ac;
  LPWSTR* w_av = CommandLineToArgvW(GetCommandLineW(), &ac);

  std::vector<std::string> av1(ac);
  std::vector<char const*> av2(ac);
  for(int i=0; i<ac; i++)
    {
    av1[i] = ToNarrow(w_av[i]);
    av2[i] = av1[i].c_str();
    }
  LocalFree(w_av);
  return CommandLineArguments(ac, &av2[0]);
#else
  return CommandLineArguments(argc, argv);
#endif
}

Encoding::CommandLineArguments::CommandLineArguments(int ac,
                                                     char const* const* av)
{
  this->argv_.resize(ac+1);
  for(int i=0; i<ac; i++)
    {
    this->argv_[i] = strdup(av[i]);
    }
  this->argv_[ac] = 0;
}

Encoding::CommandLineArguments::CommandLineArguments(int ac,
                                                     wchar_t const* const* av)
{
  this->argv_.resize(ac+1);
  for(int i=0; i<ac; i++)
    {
    this->argv_[i] = kwsysEncoding_DupToNarrow(av[i]);
    }
  this->argv_[ac] = 0;
}

Encoding::CommandLineArguments::~CommandLineArguments()
{
  for(size_t i=0; i<this->argv_.size(); i++)
    {
    free(argv_[i]);
    }
}

Encoding::CommandLineArguments::
  CommandLineArguments(const CommandLineArguments& other)
{
  this->argv_.resize(other.argv_.size());
  for(size_t i=0; i<this->argv_.size(); i++)
    {
    this->argv_[i] = other.argv_[i] ? strdup(other.argv_[i]) : 0;
    }
}

Encoding::CommandLineArguments&
Encoding::CommandLineArguments::operator=(const CommandLineArguments& other)
{
  if(this != &other)
    {
    size_t i;
    for(i=0; i<this->argv_.size(); i++)
      {
      free(this->argv_[i]);
      }

    this->argv_.resize(other.argv_.size());
    for(i=0; i<this->argv_.size(); i++)
      {
      this->argv_[i] = other.argv_[i] ? strdup(other.argv_[i]) : 0;
      }
    }

{'fraction_non_alphanumeric': 0.18822189686025703, 'fraction_numerical': 0.013990564503009598, 'mean_word_length': 3.8716323296354993, 'pattern_counts': {'":': 0, '<': 27, '<?xml version=': 0, '>': 43, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 8, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '568563', 'n_tokens_mistral': 2107, 'n_tokens_neox': 2034, 'n_words': 443}