File: latte-string.h

package info (click to toggle)
latte 2.1-9
  • links: PTS
  • area: main
  • in suites: woody
  • size: 2,064 kB
  • ctags: 1,223
  • sloc: sh: 7,506; cpp: 5,831; ansic: 662; perl: 628; makefile: 350; yacc: 196; lisp: 114
file content (71 lines) | stat: -rw-r--r-- 2,279 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
// -*- c++ -*-

// Copyright 1998,1999 Zanshin Inc.                  <http://www.zanshin.com/>

// The contents of this file are subject to the Zanshin Public License Version
// 1.0 (the "License"); you may not use this file except in compliance with the
// License.  You should have received a copy of the License with Latte; see
// the file COPYING.  You may also obtain a copy of the License at
// <http://www.zanshin.com/ZPL.html>.
// 
// Software distributed under the License is distributed on an "AS IS" basis,
// WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
// for the specific language governing rights and limitations under the
// License.
// 
// The Original Code is Latte.
// 
// The Initial Developer of the Original Code is Zanshin, Inc.

#ifndef LATTE_STRING_H
# define LATTE_STRING_H

#ifndef CONFIGURE_IS_RUNNING
# include <latte-conf.h>
#endif // CONFIGURE_IS_RUNNING
#include <string>

#undef latte_use_intrinsic_string

#if defined(HAVE_TWO_ITERATOR_STRING_CTOR) && !defined(USE_STRING_REMOVE)
# define latte_use_intrinsic_string 1
#endif // HAVE_TWO_ITERATOR_STRING_CTOR && !USE_STRING_REMOVE

#ifdef latte_use_intrinsic_string

typedef std::string latte_string;

#else // latte_use_intrinsic_string

class latte_string : public std::string {
 public:
  latte_string() {}
  latte_string(const char *str) : std::string(str) {}
  latte_string(const char *str, size_t n) : std::string(str, n) {}
  latte_string(const std::string &other) : std::string(other) {}

# ifdef HAVE_TWO_ITERATOR_STRING_CTOR
  latte_string(const const_iterator &a, const const_iterator &b) :
    std::string(a, b) {}
# else // HAVE_TWO_ITERATOR_STRING_CTOR
  latte_string(const const_iterator &a, const const_iterator &b) {
    for (const_iterator i = a; i != b; ++i)
      insert(end(), *i);
  }
#endif // HAVE_TWO_ITERATOR_STRING_CTOR

#ifdef USE_STRING_REMOVE
  latte_string &erase(size_t pos) { remove(pos); return *this; }
#endif // USE_STRING_REMOVE
};

#include <iostream>

extern std::ostream &operator << (std::ostream &, const latte_string &);

extern bool operator < (const latte_string &, const latte_string &);
extern bool operator == (const latte_string &, const latte_string &);

#endif // latte_use_intrinsic_string

#endif // LATTE_STRING_H