Add even more of the source
This should be about everything needed to build so far?
This commit is contained in:
parent
af3619d4fa
commit
849723c9cf
547 changed files with 149239 additions and 0 deletions
113
CommonUtilitiesLib/DateTranslator.h
Normal file
113
CommonUtilitiesLib/DateTranslator.h
Normal file
|
@ -0,0 +1,113 @@
|
|||
/*
|
||||
*
|
||||
* @APPLE_LICENSE_HEADER_START@
|
||||
*
|
||||
* Copyright (c) 1999-2008 Apple Inc. All Rights Reserved.
|
||||
*
|
||||
* This file contains Original Code and/or Modifications of Original Code
|
||||
* as defined in and that are subject to the Apple Public Source License
|
||||
* Version 2.0 (the 'License'). You may not use this file except in
|
||||
* compliance with the License. Please obtain a copy of the License at
|
||||
* http://www.opensource.apple.com/apsl/ and read it before using this
|
||||
* file.
|
||||
*
|
||||
* The Original Code and all software distributed under the License are
|
||||
* distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
|
||||
* EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
|
||||
* INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
|
||||
* Please see the License for the specific language governing rights and
|
||||
* limitations under the License.
|
||||
*
|
||||
* @APPLE_LICENSE_HEADER_END@
|
||||
*
|
||||
*/
|
||||
/*
|
||||
File: DateTranslator.h
|
||||
|
||||
Contains: Efficient routines & data structures for converting from
|
||||
RFC 1123 compliant date strings to local file system dates & vice versa.
|
||||
|
||||
|
||||
|
||||
*/
|
||||
|
||||
#ifndef _DATE_TRANSLATOR_H_
|
||||
#define _DATE_TRANSLATOR_H_
|
||||
|
||||
#include <ctype.h>
|
||||
#include <time.h>
|
||||
#include "StrPtrLen.h"
|
||||
|
||||
class DateBuffer;
|
||||
|
||||
class DateTranslator
|
||||
{
|
||||
public:
|
||||
|
||||
// this updates the DateBuffer to be the current date / time.
|
||||
// If you wish to set the DateBuffer to a particular date, pass in that date.
|
||||
// Dates should be in the OS.h compliant format
|
||||
static void UpdateDateBuffer(DateBuffer* inDateBuffer, const SInt64& inDate, time_t gmtoffset = 0);
|
||||
|
||||
//Given an HTTP/1.1 compliant date string (in one of the three 1.1 formats)
|
||||
//this returns an OS.h compliant date/time value.
|
||||
static SInt64 ParseDate(StrPtrLen* inDateString);
|
||||
|
||||
private:
|
||||
|
||||
static UInt32 ConvertCharToMonthTableIndex(int inChar)
|
||||
{
|
||||
return (UInt32)(toupper(inChar) - 'A'); // Convert to a value between 0 - 25
|
||||
}
|
||||
};
|
||||
|
||||
class DateBuffer
|
||||
{
|
||||
public:
|
||||
|
||||
// This class provides no protection against being accessed from multiple threads
|
||||
// simultaneously. Update & InexactUpdate rewrite the date buffer, so care should
|
||||
// be taken to protect against simultaneous access.
|
||||
|
||||
DateBuffer() : fLastDateUpdate(0) { fDateBuffer[0] = 0; }
|
||||
~DateBuffer() {}
|
||||
|
||||
//SEE RFC 1123 for details on the date string format
|
||||
//ex: Mon, 04 Nov 1996 21:42:17 GMT
|
||||
|
||||
//RFC 1123 date strings are always of this length
|
||||
enum
|
||||
{
|
||||
kDateBufferLen = 29
|
||||
};
|
||||
|
||||
// Updates this date buffer to reflect the current time.
|
||||
// If a date is provided, this updates the DateBuffer to be that date.
|
||||
void Update(const SInt64& inDate) { DateTranslator::UpdateDateBuffer(this, inDate); }
|
||||
|
||||
// Updates this date buffer to reflect the current time, with a certain degree
|
||||
// of inexactitude (the range of error is defined by the kUpdateInterval value)
|
||||
void InexactUpdate();
|
||||
|
||||
//returns a NULL terminated C-string always of kHTTPDateLen length.
|
||||
char *GetDateBuffer() { return fDateBuffer; }
|
||||
|
||||
private:
|
||||
|
||||
enum
|
||||
{
|
||||
kUpdateInterval = 60000 // Update every minute
|
||||
};
|
||||
|
||||
//+1 for terminator +1 for padding
|
||||
char fDateBuffer[kDateBufferLen + 2];
|
||||
SInt64 fLastDateUpdate;
|
||||
|
||||
friend class DateTranslator;
|
||||
};
|
||||
|
||||
|
||||
#endif
|
||||
|
||||
|
Loading…
Add table
Add a link
Reference in a new issue