summaryrefslogtreecommitdiff
path: root/cpp/demo/book/lifecycle/FilesystemI.h
diff options
context:
space:
mode:
Diffstat (limited to 'cpp/demo/book/lifecycle/FilesystemI.h')
-rw-r--r--cpp/demo/book/lifecycle/FilesystemI.h83
1 files changed, 83 insertions, 0 deletions
diff --git a/cpp/demo/book/lifecycle/FilesystemI.h b/cpp/demo/book/lifecycle/FilesystemI.h
new file mode 100644
index 00000000000..ae3c42c7d79
--- /dev/null
+++ b/cpp/demo/book/lifecycle/FilesystemI.h
@@ -0,0 +1,83 @@
+// **********************************************************************
+//
+// Copyright (c) 2003-2007 ZeroC, Inc. All rights reserved.
+//
+// This copy of Ice is licensed to you under the terms described in the
+// ICE_LICENSE file included in this distribution.
+//
+// **********************************************************************
+
+#ifndef __FilesystemI_h__
+#define __FilesystemI_h__
+
+#include <Ice/Ice.h>
+#include <IceUtil/Mutex.h>
+#include <Filesystem.h>
+#include <map>
+
+namespace FilesystemI
+{
+ class DirectoryI;
+ typedef IceUtil::Handle<DirectoryI> DirectoryIPtr;
+
+ class NodeI : virtual public Filesystem::Node
+ {
+ public:
+ virtual std::string name(const Ice::Current&);
+ Ice::Identity id() const;
+
+ protected:
+ NodeI(const ::std::string&, const DirectoryIPtr&);
+
+ const ::std::string _name;
+ const DirectoryIPtr _parent;
+ bool _destroyed;
+ Ice::Identity _id;
+ IceUtil::Mutex _m;
+ };
+
+ typedef IceUtil::Handle<NodeI> NodeIPtr;
+
+ class FileI : virtual public Filesystem::File, virtual public NodeI
+ {
+ public:
+ virtual Filesystem::Lines read(const Ice::Current&);
+ virtual void write(const Filesystem::Lines&, const Ice::Current&);
+ virtual void destroy(const Ice::Current&);
+
+ FileI(const Ice::ObjectAdapterPtr&, const std::string&, const DirectoryIPtr&);
+
+ private:
+ Filesystem::Lines _lines;
+ };
+
+ typedef IceUtil::Handle<FileI> FileIPtr;
+
+ class DirectoryI : virtual public NodeI, virtual public Filesystem::Directory
+ {
+ public:
+ virtual Filesystem::NodeDescSeq list(const Ice::Current&);
+ virtual Filesystem::NodeDesc find(const std::string& name, const Ice::Current&);
+ Filesystem::FilePrx createFile(const ::std::string&, const Ice::Current&);
+ Filesystem::DirectoryPrx createDirectory(const ::std::string&, const Ice::Current&);
+ virtual void destroy(const Ice::Current&);
+
+ DirectoryI(const Ice::ObjectAdapterPtr&, const std::string& = "/", const DirectoryIPtr& = 0);
+ void addChild(const ::std::string&, const NodeIPtr&);
+
+ void addReapEntry(const ::std::string&);
+
+ IceUtil::Mutex _lcMutex;
+
+ private:
+ typedef ::std::map< ::std::string, NodeIPtr> Contents;
+ Contents _contents;
+
+ typedef ::std::map<DirectoryIPtr, ::std::vector< ::std::string> > ReapMap;
+ static ReapMap _reapMap;
+
+ static void reap();
+ };
+}
+
+#endif