monotone

monotone Mtn Source Tree

Root/src/vocab.hh

1// Copyright (C) 2002 Graydon Hoare <graydon@pobox.com>
2//
3// This program is made available under the GNU GPL version 2.0 or
4// greater. See the accompanying file COPYING for details.
5//
6// This program is distributed WITHOUT ANY WARRANTY; without even the
7// implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
8// PURPOSE.
9
10#ifndef __VOCAB_HH__
11#define __VOCAB_HH__
12
13#include <boost/shared_ptr.hpp>
14
15#include "sanity.hh"
16
17// the purpose of this file is to wrap things which are otherwise strings
18// in a bit of typesafety, set up enumerations and tuple-types, and
19// generally describe the "vocabulary" (nouns anyways) that modules in this
20// program use.
21
22// For some reason, shared_ptr copy is about a hundred times faster
23// than string refcopy on my system (g++ 4). This only happens because
24// we tell Boost not to worry about threads... but I don't recognize any
25// thread stuff in the string headers.
26
27class immutable_string
28{
29 boost::shared_ptr<std::string> _rep;
30 static std::string empty;
31
32public:
33 immutable_string()
34 {}
35 immutable_string(std::string const & s)
36 : _rep(new std::string(s))
37 {}
38
39 std::string const & get() const
40 {
41 if (_rep)
42 return *_rep;
43 else
44 return empty;
45 }
46};
47
48#include "vocab_macros.hh"
49#define ENCODING(enc) hh_ENCODING(enc)
50#define ENCODING_NOVERIFY(enc) hh_ENCODING_NOVERIFY(enc)
51#define DECORATE(dec) hh_DECORATE(dec)
52#define ATOMIC(ty) hh_ATOMIC(ty)
53#define ATOMIC_HOOKED(ty,hook) hh_ATOMIC_HOOKED(ty,hook)
54#define ATOMIC_NOVERIFY(ty) hh_ATOMIC_NOVERIFY(ty)
55#define ATOMIC_BINARY(ty) hh_ATOMIC_BINARY(ty)
56
57#ifdef HAVE_EXTERN_TEMPLATE
58#define EXTERN extern
59#else
60#define EXTERN /* */
61#endif
62
63#include "vocab_terms.hh"
64
65#undef ATOMIC
66#undef ATOMIC_HOOKED
67#undef ATOMIC_NOVERIFY
68#undef ATOMIC_BINARY
69#undef DECORATE
70#undef ENCODING
71#undef ENCODING_NOVERIFY
72
73// most of the time you want to use these typedefs and forget
74// about the stuff in vocab_terms.hh
75
76typedef revision<id> revision_id;
77typedef manifest<id> manifest_id;
78typedef file<id> file_id;
79typedef key<id> key_id;
80typedef epoch<id> epoch_id;
81
82typedef epoch< data > epoch_data;
83
84typedef revision< data > revision_data;
85typedef roster< data > roster_data;
86typedef manifest< data > manifest_data;
87typedef file< data > file_data;
88
89typedef roster< delta > roster_delta;
90typedef manifest< delta > manifest_delta;
91typedef file< delta > file_delta;
92
93typedef u64 file_size;
94
95// diff type; this is here and not diff_patch.hh, because options_list.hh
96// needs to refer to it
97enum diff_type
98{
99 unified_diff,
100 context_diff,
101 external_diff
102};
103
104// determines which kind of date format we request for date formatting
105// only a subset of the following options are currently actually used
106enum date_format_spec
107{
108 date_long,
109 date_short,
110 time_long,
111 time_short,
112 date_time_long,
113 date_time_short
114};
115
116// to distinguish different database types
117enum db_type
118{
119 memory_db,
120 managed_db,
121 unmanaged_db
122};
123
124// to distinguish the payload type of a sync
125enum connection_type
126{
127 netsync_connection,
128 automate_connection
129};
130
131static const std::string memory_db_identifier = ":memory:";
132
133// do these belong here?
134inline bool
135null_id(id const & i)
136{
137 return i().empty();
138}
139
140inline bool
141null_id(hexenc<id> const & i)
142{
143 return i().empty();
144}
145
146inline bool
147null_id(file_id const & i)
148{
149 return i.inner()().empty();
150}
151
152inline bool
153null_id(manifest_id const & i)
154{
155 return i.inner()().empty();
156}
157
158inline bool
159null_id(revision_id const & i)
160{
161 return i.inner()().empty();
162}
163
164
165id
166fake_id();
167
168#endif // __VOCAB_HH__
169
170// Local Variables:
171// mode: C++
172// fill-column: 76
173// c-file-style: "gnu"
174// indent-tabs-mode: nil
175// End:
176// vim: et:sw=2:sts=2:ts=2:cino=>2s,{s,\:s,+s,t0,g0,^-2,e-2,n-2,p2s,(0,=s:

Archive Download this file

Branches

Tags

Quick Links:     www.monotone.ca    -     Downloads    -     Documentation    -     Wiki    -     Code Forge    -     Build Status