Page Speed Optimization Libraries  1.2.24.1
net/instaweb/util/public/shared_circular_buffer.h
Go to the documentation of this file.
00001 /*
00002  * Copyright 2011 Google Inc.
00003  *
00004  * Licensed under the Apache License, Version 2.0 (the "License");
00005  * you may not use this file except in compliance with the License.
00006  * You may obtain a copy of the License at
00007  *
00008  *      http:///www.apache.org/licenses/LICENSE-2.0
00009  *
00010  * Unless required by applicable law or agreed to in writing, software
00011  * distributed under the License is distributed on an "AS IS" BASIS,
00012  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
00013  * See the License for the specific language governing permissions and
00014  * limitations under the License.
00015  */
00016 
00018 
00019 #ifndef NET_INSTAWEB_UTIL_PUBLIC_SHARED_CIRCULAR_BUFFER_H_
00020 #define NET_INSTAWEB_UTIL_PUBLIC_SHARED_CIRCULAR_BUFFER_H_
00021 
00022 #include "net/instaweb/util/public/basictypes.h"
00023 #include "net/instaweb/util/public/scoped_ptr.h"
00024 #include "net/instaweb/util/public/string.h"
00025 #include "net/instaweb/util/public/string_util.h"
00026 
00027 namespace net_instaweb {
00028 
00029 class AbstractSharedMem;
00030 class AbstractSharedMemSegment;
00031 class AbstractMutex;
00032 class CircularBuffer;
00033 class MessageHandler;
00034 class Writer;
00035 
00042 
00043 class SharedCircularBuffer {
00044  public:
00048   SharedCircularBuffer(AbstractSharedMem* shm_runtime,
00049                        const int buffer_capacity,
00050                        const GoogleString& filename_prefix,
00051                        const GoogleString& filename_suffix);
00052   virtual ~SharedCircularBuffer();
00057   bool InitSegment(bool parent, MessageHandler* handler);
00059   void Clear();
00061   bool Write(const StringPiece& message);
00063   bool Dump(Writer* writer, MessageHandler* handler);
00065   GoogleString ToString(MessageHandler* handler);
00068   void GlobalCleanup(MessageHandler* handler);
00069 
00070  private:
00071   bool InitMutex(MessageHandler* handler);
00072   GoogleString SegmentName() const;
00073 
00076   AbstractSharedMem* shm_runtime_;
00078   const int buffer_capacity_;
00080   CircularBuffer* buffer_;
00081   const GoogleString filename_prefix_;
00083   const GoogleString filename_suffix_;
00085   scoped_ptr<AbstractMutex> mutex_;
00087   scoped_ptr<AbstractSharedMemSegment> segment_;
00088 
00089   DISALLOW_COPY_AND_ASSIGN(SharedCircularBuffer);
00090 };
00091 
00092 }  
00093 
00094 #endif  ///< NET_INSTAWEB_UTIL_PUBLIC_SHARED_CIRCULAR_BUFFER_H_
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines