summaryrefslogtreecommitdiff
path: root/cpp
diff options
context:
space:
mode:
authorMichi Henning <michi@zeroc.com>2007-07-26 16:02:33 +1000
committerMichi Henning <michi@zeroc.com>2007-07-26 16:02:33 +1000
commit9986c4e5c3c484ffea0302eb57c61eb6ba8c0d09 (patch)
treecd40c3b6263d4e3792aa75256cb7b996c2682427 /cpp
parentAdded life cycle demo for book. (diff)
downloadice-9986c4e5c3c484ffea0302eb57c61eb6ba8c0d09.tar.bz2
ice-9986c4e5c3c484ffea0302eb57c61eb6ba8c0d09.tar.xz
ice-9986c4e5c3c484ffea0302eb57c61eb6ba8c0d09.zip
Added Java life cycle demo. Fixed a few style issues and a bug
in C++ version.
Diffstat (limited to 'cpp')
-rw-r--r--cpp/demo/book/Makefile.mak2
-rw-r--r--cpp/demo/book/lifecycle/Client.cpp12
-rw-r--r--cpp/demo/book/lifecycle/FilesystemI.cpp13
-rw-r--r--cpp/demo/book/lifecycle/Grammar.y8
-rw-r--r--cpp/demo/book/lifecycle/Parser.cpp28
-rw-r--r--cpp/demo/book/lifecycle/Parser.h2
-rw-r--r--cpp/demo/book/lifecycle/Server.cpp10
7 files changed, 42 insertions, 33 deletions
diff --git a/cpp/demo/book/Makefile.mak b/cpp/demo/book/Makefile.mak
index a33a870d508..0c2e315873b 100644
--- a/cpp/demo/book/Makefile.mak
+++ b/cpp/demo/book/Makefile.mak
@@ -11,7 +11,7 @@ top_srcdir = ..\..
!include $(top_srcdir)\config\Make.rules.mak
-SUBDIRS = printer simple_filesystem freeze_filesystem
+SUBDIRS = printer simple_filesystem lifecycle freeze_filesystem
$(EVERYTHING)::
@for %i in ( $(SUBDIRS) ) do \
diff --git a/cpp/demo/book/lifecycle/Client.cpp b/cpp/demo/book/lifecycle/Client.cpp
index 0e74b129254..329d6bac954 100644
--- a/cpp/demo/book/lifecycle/Client.cpp
+++ b/cpp/demo/book/lifecycle/Client.cpp
@@ -18,21 +18,25 @@ class FilesystemClient : virtual public Ice::Application
{
public:
virtual int run(int, char * []) {
- // Terminate cleanly on receipt of a signal
+ // Terminate cleanly on receipt of a signal.
//
shutdownOnInterrupt();
// Create a proxy for the root directory
//
Ice::ObjectPrx base = communicator()->stringToProxy("RootDir:default -p 10000");
- if (!base)
+ if(!base)
+ {
throw "Could not create proxy";
+ }
- // Down-cast the proxy to a Directory proxy
+ // Down-cast the proxy to a Directory proxy.
//
DirectoryPrx rootDir = DirectoryPrx::checkedCast(base);
- if (!rootDir)
+ if(!rootDir)
+ {
throw "Invalid proxy";
+ }
ParserPtr p = new Parser(rootDir);
return p->parse();
diff --git a/cpp/demo/book/lifecycle/FilesystemI.cpp b/cpp/demo/book/lifecycle/FilesystemI.cpp
index 09d10b37f51..9b786c325ff 100644
--- a/cpp/demo/book/lifecycle/FilesystemI.cpp
+++ b/cpp/demo/book/lifecycle/FilesystemI.cpp
@@ -239,6 +239,10 @@ FilesystemI::DirectoryI::destroy(const Current& c)
{
throw ObjectNotExistException(__FILE__, __LINE__);
}
+ if(!_contents.empty())
+ {
+ throw PermissionDenied("Cannot destroy non-empty directory");
+ }
_destroyed = true;
}
@@ -246,11 +250,6 @@ FilesystemI::DirectoryI::destroy(const Current& c)
reap();
- if(!_contents.empty())
- {
- throw PermissionDenied("Cannot destroy non-empty directory");
- }
-
c.adapter->remove(id());
_parent->addReapEntry(_name);
}
@@ -272,13 +271,15 @@ FilesystemI::DirectoryI::DirectoryI(const ObjectAdapterPtr& a, const string& nam
a->add(this, _id);
}
+// Add the passed name-node pair to the _contents map.
+
void
FilesystemI::DirectoryI::addChild(const string& name, const NodeIPtr& node)
{
_contents[name] = node;
}
-// Add a directory and the name of a deleted entry in that directory to the reap map.
+// Add this directory and the name of a deleted entry to the reap map.
void
FilesystemI::DirectoryI::addReapEntry(const string& name)
diff --git a/cpp/demo/book/lifecycle/Grammar.y b/cpp/demo/book/lifecycle/Grammar.y
index db4cc27f560..d0324edd9ea 100644
--- a/cpp/demo/book/lifecycle/Grammar.y
+++ b/cpp/demo/book/lifecycle/Grammar.y
@@ -99,10 +99,18 @@ command
{
parser->pwd();
}
+| TOK_CD
+{
+ parser->cd("/");
+}
| TOK_CD TOK_STRING
{
parser->cd($2.front());
}
+| TOK_CD strings
+{
+ parser->error("usage: cd [DIR]");
+}
| TOK_CAT TOK_STRING
{
parser->cat($2.front());
diff --git a/cpp/demo/book/lifecycle/Parser.cpp b/cpp/demo/book/lifecycle/Parser.cpp
index c62b8146ce6..e749028e19d 100644
--- a/cpp/demo/book/lifecycle/Parser.cpp
+++ b/cpp/demo/book/lifecycle/Parser.cpp
@@ -33,14 +33,14 @@ Parser::usage()
cout <<
"help Print this message.\n"
"pwd Print current directory (/ = root).\n"
- "cd DIR Change directory (/ = root, .. = parent).\n"
+ "cd [DIR] Change directory (/ or empty = root).\n"
"ls List current directory.\n"
"lr Recursively list current directory.\n"
"mkdir DIR [DIR...] Create directories DIR in current directory.\n"
"mkfile FILE [FILE...] Create files FILE in current directory.\n"
"rm NAME [NAME...] Delete directory or file NAME (rm * to delete all).\n"
"cat FILE List the contents of FILE.\n"
- "write FILE [STRINGS] Write STRINGS into FILE.\n"
+ "write FILE [STRING...] Write STRING to FILE.\n"
"exit, quit Exit this program.\n";
}
@@ -52,7 +52,7 @@ Parser::usage()
void
Parser::list(bool recursive)
{
- return list(_dirs.front(), recursive, 0);
+ list(_dirs.front(), recursive, 0);
}
void
@@ -64,16 +64,12 @@ Parser::list(const DirectoryPrx& dir, bool recursive, int depth)
for(NodeDescSeq::const_iterator i = contents.begin(); i != contents.end(); ++i)
{
- DirectoryPrx dir = DirectoryPrx::checkedCast(i->proxy);
- FilePrx file = FilePrx::uncheckedCast(i->proxy);
- cout << indent << i->name << (dir ? " (directory)" : " (file)");
- if(dir && recursive)
+ DirectoryPrx d = i->type == DirType ? DirectoryPrx::uncheckedCast(i->proxy) : 0;
+ cout << indent << i->name << (d ? " (directory)" : " (file)");
+ if(d && recursive)
{
- if(recursive)
- {
- cout << ":" << endl;
- list(dir, true, depth);
- }
+ cout << ":" << endl;
+ list(d, true, depth);
}
else
{
@@ -115,7 +111,7 @@ Parser::createDir(const std::list<string>& names)
{
if(*i == "..")
{
- cout << "Cannot create a file named `.'" << endl;
+ cout << "Cannot create a directory named `.'" << endl;
continue;
}
@@ -221,10 +217,11 @@ Parser::cat(const string& name)
}
void
-Parser::write(const std::list<string>& args)
+Parser::write(std::list<string>& args)
{
DirectoryPrx dir = _dirs.front();
string name = args.front();
+ args.pop_front();
NodeDesc d;
try
{
@@ -243,8 +240,7 @@ Parser::write(const std::list<string>& args)
FilePrx f = FilePrx::uncheckedCast(d.proxy);
Lines l;
- std::list<string>::const_iterator i = args.begin();
- while(++i != args.end())
+ for(std::list<string>::const_iterator i = args.begin(); i != args.end(); ++i)
{
l.push_back(*i);
}
diff --git a/cpp/demo/book/lifecycle/Parser.h b/cpp/demo/book/lifecycle/Parser.h
index 06891cd812b..8c0747d6b41 100644
--- a/cpp/demo/book/lifecycle/Parser.h
+++ b/cpp/demo/book/lifecycle/Parser.h
@@ -66,7 +66,7 @@ public:
void pwd();
void cd(const ::std::string&);
void cat(const ::std::string&);
- void write(const ::std::list< ::std::string>&);
+ void write(::std::list< ::std::string>&);
void destroy(const ::std::list< ::std::string>&);
void getInput(char*, int&, int);
diff --git a/cpp/demo/book/lifecycle/Server.cpp b/cpp/demo/book/lifecycle/Server.cpp
index ec9131ff17c..1a6aa475723 100644
--- a/cpp/demo/book/lifecycle/Server.cpp
+++ b/cpp/demo/book/lifecycle/Server.cpp
@@ -16,7 +16,7 @@ using namespace FilesystemI;
class FilesystemApp : virtual public Ice::Application {
public:
- virtual int run(int, char * []) {
+ virtual int run(int, char* []) {
// Terminate cleanly on receipt of a signal
//
shutdownOnInterrupt();
@@ -35,12 +35,12 @@ public:
//
adapter->activate();
- // Wait until we are done
+ // Wait until we are done.
//
communicator()->waitForShutdown();
- if (interrupted()) {
- cerr << appName()
- << ": received signal, shutting down" << endl;
+ if(interrupted())
+ {
+ cerr << appName() << ": received signal, shutting down" << endl;
}
return 0;