1/* Classes for Boost.Flyweight key-value tests.
2 *
3 * Copyright 2006-2014 Joaquin M Lopez Munoz.
4 * Distributed under the Boost Software License, Version 1.0.
5 * (See accompanying file LICENSE_1_0.txt or copy at
6 * http://www.boost.org/LICENSE_1_0.txt)
7 *
8 * See http://www.boost.org/libs/flyweight for library home page.
9 */
10
11#ifndef BOOST_FLYWEIGHT_TEST_HEAVY_OBJECTS_HPP
12#define BOOST_FLYWEIGHT_TEST_HEAVY_OBJECTS_HPP
13
14#if defined(_MSC_VER)
15#pragma once
16#endif
17
18#include <boost/config.hpp> /* keep it first to prevent nasty warns in MSVC */
19#include <boost/noncopyable.hpp>
20#include <iosfwd>
21#include <string>
22
23struct texture
24{
25 texture(const std::string& str_=""):str(str_){}
26
27 friend bool operator==(
28 const texture& x,const texture& y){return x.str==y.str;}
29 friend bool operator< (
30 const texture& x,const texture& y){return x.str< y.str;}
31 friend bool operator!=(
32 const texture& x,const texture& y){return x.str!=y.str;}
33 friend bool operator> (
34 const texture& x,const texture& y){return x.str> y.str;}
35 friend bool operator>=(
36 const texture& x,const texture& y){return x.str>=y.str;}
37 friend bool operator<=(
38 const texture& x,const texture& y){return x.str<=y.str;}
39
40 friend std::ostream& operator<<(std::ostream& os,const texture& x)
41 {
42 return os<<x.str;
43 }
44
45 friend std::istream& operator>>(std::istream& is,texture& x)
46 {
47 return is>>x.str;
48 }
49
50 std::string str;
51};
52
53struct from_texture_to_string
54{
55 const std::string& operator()(const texture& x)const{return x.str;}
56};
57
58struct factorization:private boost::noncopyable
59{
60 factorization(int n_=0):n(n_){}
61
62 friend bool operator==(
63 const factorization& x,const factorization& y){return x.n==y.n;}
64 friend bool operator< (
65 const factorization& x,const factorization& y){return x.n< y.n;}
66 friend bool operator!=(
67 const factorization& x,const factorization& y){return x.n!=y.n;}
68 friend bool operator> (
69 const factorization& x,const factorization& y){return x.n> y.n;}
70 friend bool operator>=(
71 const factorization& x,const factorization& y){return x.n>=y.n;}
72 friend bool operator<=(
73 const factorization& x,const factorization& y){return x.n<=y.n;}
74
75 friend std::ostream& operator<<(std::ostream& os,const factorization& x)
76 {
77 return os<<x.n;
78 }
79
80 friend std::istream& operator>>(std::istream& is,factorization& x)
81 {
82 return is>>x.n;
83 }
84
85 int n;
86};
87
88#if !defined(BOOST_NO_EXCEPTIONS)
89struct throwing_value_exception{};
90
91struct throwing_value
92{
93 throwing_value():n(0){}
94 throwing_value(const throwing_value&){throw throwing_value_exception();}
95 throwing_value(int){throw throwing_value_exception();}
96
97 int n;
98};
99
100struct from_throwing_value_to_int
101{
102 const int& operator()(const throwing_value& x)const{return x.n;}
103};
104#endif
105
106#endif
107

source code of boost/libs/flyweight/test/heavy_objects.hpp