view test/cedet/tests/testpolymorph.cpp @ 109732:470bed744331

Use autoconf determined WORDS_BIGENDIAN instead of hardcoded definition. * m/alpha.h: Don't define/undef WORDS_BIG_ENDIAN. * m/amdx86-64.h: Likewise. * m/arm.h: Likewise. * m/hp800.h: Likewise. * m/ia64.h: Likewise. * m/ibmrs6000.h: Likewise. * m/ibms390.h: Likewise. * m/intel386.h: Likewise. * m/iris4d.h: Likewise. * m/m68k.h: Likewise. * m/macppc.h: Likewise. * m/mips.h: Likewise. * m/sh3.h: Likewise. * m/sparc.h: Likewise. * m/template.h: Likewise. * m/vax.h: Likewise. * m/xtensa.h: Likewise. * fringe.c (init_fringe_bitmap): Test WORDS_BIGENDIAN instead of WORDS_BIG_ENDIAN. * lisp.h: Likewise. * md5.c: Likewise. * sound.c (le2hl, le2hs, be2hl, be2hs): Likewise. * CPP-DEFINES (WORDS_BIG_ENDIAN): Remove. * configure.in: Add AC_C_BIGENDIAN.
author Andreas Schwab <schwab@linux-m68k.org>
date Mon, 09 Aug 2010 21:25:41 +0200
parents bb33285d1ceb
children 376148b31b5e
line wrap: on
line source

/** testpolymorph.cpp --- A sequence of polymorphism examples.
 *
 * Copyright (C) 2009, 2010  Free Software Foundation, Inc.
 *
 * Author: Eric M. Ludlam <eric@siege-engine.com>
 *
 * This file is part of GNU Emacs.
 *
 * GNU Emacs is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * GNU Emacs 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 General Public License
 * along with GNU Emacs.  If not, see <http://www.gnu.org/licenses/>.
 */

#include <cmath>

// Test 1 - Functions w/ prototypes
namespace proto {

  int pt_func1(int arg1);
  int pt_func1(int arg1) {
    return 0;
  }

}

// Test 2 - Functions w/ different arg lists.
namespace fcn_poly {

  int pm_func(void) {
    return 0;
  }
  int pm_func(int a) {
    return a;
  }
  int pm_func(char a) {
    return int(a);
  }
  int pm_func(double a) {
    return int(floor(a));
  }

}

// Test 3 - Methods w/ differet arg lists.
class meth_poly {
public:
  int pm_meth(void) {
    return 0;
  }
  int pm_meth(int a) {
    return a;
  }
  int pm_meth(char a) {
    return int(a);
  }
  int pm_meth(double a) {
    return int(floor(a));
  }

};

// Test 4 - Templates w/ partial specifiers.
namespace template_partial_spec {
  template <typename T> class test
  {
  public:
    void doSomething(T t) { };
  };

  template <typename T> class test<T *>
  {
  public:
    void doSomething(T* t) { };
  };
}

// Test 5 - Templates w/ full specicialization which may or may not share
// common functions.
namespace template_full_spec {
  template <typename T> class test
  {
  public:
    void doSomething(T t) { };
    void doSomethingElse(T t) { };
  };

  template <> class test<int>
  {
  public:
    void doSomethingElse(int t) { };
    void doSomethingCompletelyDifferent(int t) { };
  };
}

// Test 6 - Dto., but for templates with multiple parameters.
namespace template_multiple_spec {
  template <typename T1, typename T2> class test
  {
  public:
    void doSomething(T1 t) { };
    void doSomethingElse(T2 t) { };
  };

  template <typename T2> class test<int, T2>
  {
  public:
    void doSomething(int t) { };
    void doSomethingElse(T2 t) { };
  };

  template <> class test<float, int>
  {
  public:
    void doSomething(float t) { };
    void doSomethingElse(int t) { };
    void doNothing(void) { };
  };
}


// End of polymorphism test file.

// arch-tag: e2c04959-9b3b-4b4f-b9c2-445bf4848aa4