[llvm] r238491 - Revert "Refactoring cl::list_storage from "is a" to "has a" std::vector."

David Blaikie dblaikie at gmail.com
Thu May 28 18:01:34 PDT 2015


On Thu, May 28, 2015 at 1:47 PM, Chris Bieneman <beanz at apple.com> wrote:

> Author: cbieneman
> Date: Thu May 28 15:47:02 2015
> New Revision: 238491
>
> URL: http://llvm.org/viewvc/llvm-project?rev=238491&view=rev
> Log:
> Revert "Refactoring cl::list_storage from "is a" to "has a" std::vector."
>

It helps to mention in the commit message why a revert is being made - for
spectators and future readers who might attempt the same change.


>
> This reverts commit 117715ca0613d3db144241499401f2ec5398f1d5.
>
> Modified:
>     llvm/trunk/include/llvm/Support/CommandLine.h
>
> Modified: llvm/trunk/include/llvm/Support/CommandLine.h
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Support/CommandLine.h?rev=238491&r1=238490&r2=238491&view=diff
>
> ==============================================================================
> --- llvm/trunk/include/llvm/Support/CommandLine.h (original)
> +++ llvm/trunk/include/llvm/Support/CommandLine.h Thu May 28 15:47:02 2015
> @@ -1284,61 +1284,16 @@ public:
>    }
>  };
>
> -// Define how to hold a class type object, such as a string.
> -// Originally this code inherited from std::vector. In transitioning to a
> new
> -// API for command line options we should change this. The new
> implementation
> -// of this list_storage specialization implements the minimum subset of
> the
> -// std::vector API required for all the current clients.
> +// Define how to hold a class type object, such as a string.  Since we can
> +// inherit from a class, we do so.  This makes us exactly compatible with
> the
> +// object in all cases that it is used.
>  //
> -// FIXME: Reduce this API to a more narrow subset of std::vector
> -//
> -template <class DataType> class list_storage<DataType, bool> {
> -  std::vector<DataType> Storage;
> -
> +template <class DataType>
> +class list_storage<DataType, bool> : public std::vector<DataType> {
>  public:
> -  typedef typename std::vector<DataType>::iterator iterator;
> -
> -  iterator begin() { return Storage.begin(); }
> -  iterator end() { return Storage.end(); }
> -
> -  typedef typename std::vector<DataType>::const_iterator const_iterator;
> -  const_iterator begin() const { return Storage.begin(); }
> -  const_iterator end() const { return Storage.end(); }
> -
> -  typedef typename std::vector<DataType>::size_type size_type;
> -  size_type size() const { return Storage.size(); }
> -
> -  bool empty() const { return Storage.empty(); }
> -
> -  void push_back(const DataType &value) { Storage.push_back(value); }
> -  void push_back(DataType &&value) { Storage.push_back(value); }
> -
> -  typedef typename std::vector<DataType>::reference reference;
> -  typedef typename std::vector<DataType>::const_reference const_reference;
> -  reference operator[](size_type pos) { return Storage[pos]; }
> -  const_reference operator[](size_type pos) const { return Storage[pos]; }
> -
> -  iterator erase(const_iterator pos) { return Storage.erase(pos); }
> -  iterator erase(const_iterator first, const_iterator last) {
> -    return Storage.erase(first, last);
> -  }
> -
> -  iterator insert(const_iterator pos, const DataType &value) {
> -    return Storage.insert(pos, value);
> -  }
> -  iterator insert(const_iterator pos, DataType &&value) {
> -    return Storage.insert(pos, value);
> +  template <class T> void addValue(const T &V) {
> +    std::vector<DataType>::push_back(V);
>    }
> -
> -  reference front() { return Storage.front(); }
> -  const_reference front() const { return Storage.front(); }
> -
> -  operator std::vector<DataType>&() { return Storage; }
> -  operator ArrayRef<DataType>() { return Storage; }
> -  std::vector<DataType> *operator&() { return &Storage; }
> -  const std::vector<DataType> *operator&() const { return &Storage; }
> -
> -  template <class T> void addValue(const T &V) { Storage.push_back(V); }
>  };
>
>
>  //===----------------------------------------------------------------------===//
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20150528/8f4a1e0e/attachment.html>


More information about the llvm-commits mailing list