1 // lock.h
2 //
3 // Licensed under the Apache License, Version 2.0 (the "License");
4 // you may not use this file except in compliance with the License.
5 // You may obtain a copy of the License at
6 //
7 //      http://www.apache.org/licenses/LICENSE-2.0
8 //
9 // Unless required by applicable law or agreed to in writing, software
10 // distributed under the License is distributed on an "AS IS" BASIS,
11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 // See the License for the specific language governing permissions and
13 // limitations under the License.
14 //
15 // Author: riley@google.com (Michael Riley)
16 //
17 // \file
18 // Google-compatibility locking declarations and inline definitions
19 //
20 // Classes and functions here are no-ops (by design); proper locking requires
21 // actual implementation.
22 
23 #ifndef FST_LIB_LOCK_H__
24 #define FST_LIB_LOCK_H__
25 
26 #include <fst/compat.h>  // for DISALLOW_COPY_AND_ASSIGN
27 
28 namespace fst {
29 
30 using namespace std;
31 
32 //
33 // Single initialization  - single-thread implementation
34 //
35 
36 typedef int FstOnceType;
37 
38 static const int FST_ONCE_INIT = 1;
39 
FstOnceInit(FstOnceType * once,void (* init)(void))40 inline int FstOnceInit(FstOnceType *once, void (*init)(void)) {
41   if (*once)
42     (*init)();
43   *once = 0;
44   return 0;
45 }
46 
47 //
48 // Thread locking - single-thread (non-)implementation
49 //
50 
51 class Mutex {
52  public:
Mutex()53   Mutex() {}
54 
55  private:
56   DISALLOW_COPY_AND_ASSIGN(Mutex);
57 };
58 
59 class MutexLock {
60  public:
MutexLock(Mutex *)61   MutexLock(Mutex *) {}
62 
63  private:
64   DISALLOW_COPY_AND_ASSIGN(MutexLock);
65 };
66 
67 class ReaderMutexLock {
68  public:
ReaderMutexLock(Mutex *)69   ReaderMutexLock(Mutex *) {}
70 
71  private:
72   DISALLOW_COPY_AND_ASSIGN(ReaderMutexLock);
73 };
74 
75 // Reference counting - single-thread implementation
76 class RefCounter {
77  public:
RefCounter()78   RefCounter() : count_(1) {}
79 
count()80   int count() const { return count_; }
Incr()81   int Incr() const { return ++count_; }
Decr()82   int Decr() const {  return --count_; }
83 
84  private:
85   mutable int count_;
86 
87   DISALLOW_COPY_AND_ASSIGN(RefCounter);
88 };
89 
90 }  // namespace fst
91 
92 #endif  // FST_LIB_LOCK_H__
93