/indra/llvfs/lllfsthread.h
C++ Header | 148 lines | 88 code | 25 blank | 35 comment | 0 complexity | c1d930feb263ebbaa45dea8ba39bc14a MD5 | raw file
Possible License(s): LGPL-2.1
- /**
- * @file lllfsthread.h
- * @brief LLLFSThread base class
- *
- * $LicenseInfo:firstyear=2000&license=viewerlgpl$
- * Second Life Viewer Source Code
- * Copyright (C) 2010, Linden Research, Inc.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation;
- * version 2.1 of the License only.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- *
- * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
- * $/LicenseInfo$
- */
- #ifndef LL_LLLFSTHREAD_H
- #define LL_LLLFSTHREAD_H
- #include <queue>
- #include <string>
- #include <map>
- #include <set>
- #include "llapr.h"
- #include "llpointer.h"
- #include "llqueuedthread.h"
- //============================================================================
- // Threaded Local File System
- //============================================================================
- class LLLFSThread : public LLQueuedThread
- {
- //------------------------------------------------------------------------
- public:
- enum operation_t {
- FILE_READ,
- FILE_WRITE,
- FILE_RENAME,
- FILE_REMOVE
- };
- //------------------------------------------------------------------------
- public:
- class Responder : public LLThreadSafeRefCount
- {
- protected:
- ~Responder();
- public:
- virtual void completed(S32 bytes) = 0;
- };
- class Request : public QueuedRequest
- {
- protected:
- virtual ~Request(); // use deleteRequest()
-
- public:
- Request(LLLFSThread* thread,
- handle_t handle, U32 priority,
- operation_t op, const std::string& filename,
- U8* buffer, S32 offset, S32 numbytes,
- Responder* responder);
- S32 getBytes()
- {
- return mBytes;
- }
- S32 getBytesRead()
- {
- return mBytesRead;
- }
- S32 getOperation()
- {
- return mOperation;
- }
- U8* getBuffer()
- {
- return mBuffer;
- }
- const std::string& getFilename()
- {
- return mFileName;
- }
-
- /*virtual*/ bool processRequest();
- /*virtual*/ void finishRequest(bool completed);
- /*virtual*/ void deleteRequest();
-
- private:
- LLLFSThread* mThread;
- operation_t mOperation;
-
- std::string mFileName;
-
- U8* mBuffer; // dest for reads, source for writes, new UUID for rename
- S32 mOffset; // offset into file, -1 = append (WRITE only)
- S32 mBytes; // bytes to read from file, -1 = all
- S32 mBytesRead; // bytes read from file
- LLPointer<Responder> mResponder;
- };
- //------------------------------------------------------------------------
- public:
- LLLFSThread(bool threaded = TRUE);
- ~LLLFSThread();
- // Return a Request handle
- handle_t read(const std::string& filename, /* Flawfinder: ignore */
- U8* buffer, S32 offset, S32 numbytes,
- Responder* responder, U32 pri=0);
- handle_t write(const std::string& filename,
- U8* buffer, S32 offset, S32 numbytes,
- Responder* responder, U32 pri=0);
-
- // Misc
- U32 priorityCounter() { return mPriorityCounter-- & PRIORITY_LOWBITS; } // Use to order IO operations
-
- // static initializers
- static void initClass(bool local_is_threaded = TRUE); // Setup sLocal
- static S32 updateClass(U32 ms_elapsed);
- static void cleanupClass(); // Delete sLocal
-
- private:
- U32 mPriorityCounter;
-
- public:
- static LLLFSThread* sLocal; // Default local file thread
- };
- //============================================================================
- #endif // LL_LLLFSTHREAD_H