Commit graph

458 commits

Author SHA1 Message Date
64f017da43 QueryFocusStack_test pass 2010-10-16 02:21:19 +02:00
46597009f9 get the basic ScopePath_test to pass 2010-10-16 02:21:19 +02:00
5c28b5d46e re-read, verify and finish off the Scope, ScopeLocator and QueryFocus implementation 2010-10-16 02:21:19 +02:00
119f7be36c define copy operations explicitly (closes #662)
ScopePath and Scope implementation should be roughly complete
2010-10-16 02:21:19 +02:00
bba9ce2570 code up the remaining Scope operations. Closes #430 2010-10-16 02:21:18 +02:00
6dd18f96c6 extend the session services API to support scope discovery
This allows the implementation of the Scope class to access
the current Session / PlacementIndex behind the scenes
2010-10-16 02:21:18 +02:00
99f29f9795 now able to build a IterSource based opaque const Scope iterator
for this to work, scope-path.hpp injects an explicit specialisation,
causing the RangeIter defined in ScopePath to yield const Scope
2010-10-16 02:21:18 +02:00
fdfb946d63 preparation to allow explicit type bindings for iter-adapter 2010-10-16 02:21:18 +02:00
e5de12fc7a (draft) maybe solved the problem defining a scope iterator
actually that would require to extract the IterTraits
from iter-adapter.hpp to allow for such dedicate specialisations
2010-10-16 02:21:18 +02:00
9593d388cc back out that caching query, it's nonsense
defeating the whole purpose of that interface
2010-10-16 02:21:18 +02:00
001a45f64a WIP implementation idea how to get both iterations unified 2010-10-16 02:21:18 +02:00
e14aba833e remove the parent-iteration capability from Scope
its not needed yet, and would be surprisingly tricky
to implement, so lets get rid of it!
Use QueryFocus or ScopeLocator instead
2010-10-16 02:21:17 +02:00
d5cdd39f52 WIP trying to code up the public query function for scope paths
problem is how to get an iterator compatible with ScopeQuery...
2010-10-16 02:21:17 +02:00
088922a790 remove obsolete helper
seems to be a leftover, obsoleted by the simplifications done this june
in c80b1894e6 Ticket #641
2010-10-16 02:21:17 +02:00
58757281b0 rearrange the query functions to suit the changed ScopePath internals 2010-10-16 02:21:17 +02:00
1fe76e33a2 WIP: move the (planned) logic for virtual paths to ScopePath::navigate() 2010-10-16 02:21:17 +02:00
d1d7f3bc58 decided on an extension point to add virtual/effective paths
we need that later to get full meta-clip functionality
2010-10-16 02:21:17 +02:00
8078357e3c revisiting the binding scope problem 2010-10-16 02:21:17 +02:00
e16ca49894 Merge in new (experimental) 'advice' concept 2010-07-14 04:33:42 +02:00
562e571624 Purge Track-Asset from codebase (Ticket #581)
From now on EntryID<mobject::session::Track> will play this role
2010-06-21 03:43:25 +02:00
b7353c6368 indentation 2010-06-20 05:23:08 +02:00
1089b339d0 code up querying for specific track, as used in the StructFactory 2010-06-20 05:19:47 +02:00
edbb2410a0 factor out a new session API sub-module for the global query functions 2010-06-20 04:30:42 +02:00
5e104b633a querying for specific objects (automatically pick target type) 2010-06-19 08:47:28 +02:00
c1cb5320e0 factor the specific query into separate header 2010-06-19 05:37:39 +02:00
c80b1894e6 Clean up design of ScopeQuery, throw out Iterator mixin (closes #641) 2010-06-19 05:20:34 +02:00
4f6fa69f2b investigate the design problems (issuing scope exploartion queries) 2010-06-19 03:36:46 +02:00
8f0dd93308 try to reorganise confusing API arrangement. leads to discovering Bug #641 2010-06-18 03:12:59 +02:00
fab1c699ea draft test to verify behaviour
but doesn't work; somehow the filterfunciton of the baseclass
gets installed
2010-06-16 06:45:38 +02:00
a8dcd9f494 idea how to implement searching for objects with specific properties 2010-06-16 05:56:44 +02:00
a1f3ad835b investigating the problem of finding an object with given conditions 2010-06-15 05:24:05 +02:00
c6c7214826 try to break the design deadlock with sequence / track creation 2010-06-14 02:08:45 +02:00
f2269b7e78 Implement Advice binding pattern 2010-06-03 04:40:35 +02:00
debba6f769 Fix PlacementIndex corruption while deleting recursively 2010-06-03 04:37:20 +02:00
fc44e522e0 improve PlacementIndex self-verification 2010-06-03 04:37:19 +02:00
b21db07aff implement generic object attach-to-model and purge 2010-06-03 04:37:18 +02:00
c43040985c more stubbing and compilation fixes 2010-06-03 04:37:18 +02:00
8a2515c0b0 stubbing and compilation fixes 2010-06-03 04:37:18 +02:00
1119b917a9 planning general refactoring to allow intended binding/sequence handling 2010-06-03 04:37:17 +02:00
9ec865c3ab Stubbing and definitions to get element-tracking to compile 2010-06-03 04:37:16 +02:00
cdaff1566f Template instantiations for the new asset types Timeline and Sequence 2010-06-03 04:37:15 +02:00
55df5205a4 draft a mixin for adding element-tracking functionality 2010-06-03 04:37:15 +02:00
c7a9b04fba refactor SessionImpl to support nested interface modules on the API 2010-06-03 04:37:15 +02:00
fa0482fab4 WIP add sub-interfaces to the session API 2010-06-03 04:37:15 +02:00
baff536731 placement and pointee equivalence tests 2010-06-03 04:37:14 +02:00
11c5d55b73 draft: run self-check on MObject creation 2010-06-03 04:37:14 +02:00
8f34129f60 planning: structural assets and the track-ID 2010-06-03 04:37:14 +02:00
8eb0a16134 cast the new spec regarding timeline/session into unit test code 2010-06-03 04:37:14 +02:00
c2cbe4c9e8 change Timeline and Sequence to be structural assets 2010-06-03 04:37:13 +02:00
092ea07b76 kill "the EDL" 2010-06-03 04:37:12 +02:00
5b9aa5deb2 landing the new threadpool implementation 2010-02-15 00:48:52 +01:00
82967191b3 PlacementIndexQueryResolver passes unit test 2010-01-23 15:50:46 +01:00
a9a6bb3951 better store the scope-ID within a query 2010-01-23 15:50:46 +01:00
018801895b Add some test-dummy MObjects *temporarily* to core tree (Ticket #532) 2010-01-23 15:50:46 +01:00
f6cf3195cf * MObjectRef_test pass *
This is the integration of some months of work
2010-01-23 15:50:46 +01:00
0f9fc7e3dd PlacementRef works! that's a milestone. Closes #78 2010-01-23 15:50:46 +01:00
9a6f9b2ba5 PlacementIndex: possibly retaining type information on insert 2010-01-23 15:50:46 +01:00
26972376de MobjectRef_test passes compiler as a whole 2010-01-23 15:50:45 +01:00
71428ccf6f activating an MObject ref implemented, passes compiler 2010-01-23 15:50:45 +01:00
e9d641babd nail down all the MObjectRef equality comparison cases 2010-01-23 15:50:45 +01:00
e04672936a getting MObjectRef_test partially through the compiler 2010-01-23 15:50:45 +01:00
b32a48f410 Finish definition/documentation of PlacementRef and PlacementIndex 2010-01-23 15:50:45 +01:00
Michael Ploujnikov
217d17107d Use a fully qualified name for PlacementMO in PlacementIndex
This seems to satisfy g++ 4.4.2, which otherwise complains like this:

In file included from ../src/proc/mobject/session/session-impl.hpp:53,
                from ../src/proc/mobject/session/sess-manager-impl.hpp:28,
                from ../src/proc/mobject/session/sess-manager-impl.cpp:41:
../src/proc/mobject/session/placement-index.hpp:163: error:
declaration of ‘typedef class mobject::Placement<mobject::MObject,
mobject::MObject> mobject::session::PlacementIndex::PlacementMO’
../src/proc/mobject/placement.hpp:244: error: changes meaning of
‘PlacementMO’ from ‘typedef class mobject::Placement<mobject::MObject,
mobject::MObject> mobject::PlacementMO’
2010-01-16 17:04:13 +01:00
Michael Ploujnikov
e0d6f1ce66 Merge branch 'master' into second-tp-attempt
Conflicts:
	src/proc/mobject/session/placement-index.cpp
	src/proc/mobject/session/placement-index.hpp
2010-01-14 21:06:14 -05:00
Michael Ploujnikov
2f27c7d71b Use a fully qualified name for PlacementMO in PlacementIndex
This seems to satisfy g++ 4.4.2, which otherwise complains like this:

In file included from ../src/proc/mobject/session/session-impl.hpp:53,
                from ../src/proc/mobject/session/sess-manager-impl.hpp:28,
                from ../src/proc/mobject/session/sess-manager-impl.cpp:41:
../src/proc/mobject/session/placement-index.hpp:163: error:
declaration of ‘typedef class mobject::Placement<mobject::MObject,
mobject::MObject> mobject::session::PlacementIndex::PlacementMO’
../src/proc/mobject/placement.hpp:244: error: changes meaning of
‘PlacementMO’ from ‘typedef class mobject::Placement<mobject::MObject,
mobject::MObject> mobject::PlacementMO’
2010-01-14 20:57:45 -05:00
Michael Ploujnikov
f62513dea8 fix compilation errors 2010-01-14 16:46:27 -05:00
81c920c0ed Fix: static initialisation problem (due to placeholder code) #518 2010-01-10 00:04:58 +01:00
Christian Thaeter
4e7d656b71 WIP: autotools fixup for ichthyo 2010-01-09 22:17:34 +01:00
14c7f7fc62 PlacementIndex implemented, unit test pass 2010-01-09 05:10:32 +01:00
96f19c656d add call for placement equivalence check
actual functionality to be added later
2010-01-09 04:46:17 +01:00
36cd34e9b1 Placement: correct handling of ID generation on copy construction 2010-01-08 04:00:14 +01:00
92ad5d1994 change to lib::BoolCheckable for the self-valididty check 2010-01-08 03:59:30 +01:00
836f533a2f add equality comparison and identity handling 2010-01-08 03:59:01 +01:00
8c7894943c add equality comparison to the HashIndexed (mixin base) 2010-01-08 03:56:21 +01:00
a56e107fe0 PlacementIndex self-verification implemented and passes compiler 2010-01-07 08:29:27 +01:00
2fd7a2f6f9 patch temporary re-entrance problems on session creation (maybe #495) 2010-01-07 08:28:54 +01:00
226ed37e30 now able to compile PlacementIndex self-check code! 2010-01-06 07:49:25 +01:00
665bd19f8a use this to get the distinct keys of a multimap 2010-01-06 06:53:29 +01:00
2a5b080dd7 implement IterSource adapter for STL map and hashmap 2010-01-06 03:38:02 +01:00
16962ae714 IterSource implementation draft 2010-01-05 04:10:23 +01:00
73613c1e7d WIP: draft better arrangement of the PlacementIndex validation code
but still need yet another iterator related lib module
2010-01-05 01:31:22 +01:00
2b46574da3 move the for_each helpers into a separate header
(because util.hpp is used pervasively, and I don't want
<tr1/functional> in such a widely used header...
2009-12-29 04:39:27 +01:00
0dca7cbb4d not-yet-implemented.... 2009-12-29 04:30:11 +01:00
6e956f24ab WIP: drafted PlacementIndex validity self-check 2009-12-28 03:32:42 +01:00
c49d8321f6 fill in documentation and missing test cases 2009-12-27 06:36:52 +01:00
7b7e9096a3 Hook up scope contents iterator in PlacementIndex (closes #343) 2009-12-27 06:25:34 +01:00
3db676fa32 base implementation fo the ItemWrapper 2009-12-21 05:44:29 +01:00
4afa1ada5b WIP implement scope content enumeration
unresolved problem with TransformIter yielding a reference
2009-12-18 05:05:16 +01:00
9f09a8aa49 push creation of the root MObject to users of PlacementIndex 2009-12-17 03:16:08 +01:00
d7aab2990f placeholder implementation of Label MObject 2009-12-17 03:14:59 +01:00
e3de0aac7c WIP handling of the model root element within the index 2009-12-16 04:54:36 +01:00
73fcc78cb3 PlacementIndex checks for bottom (invalid) ID 2009-12-13 05:49:08 +01:00
b74a505c44 change implementation of "bottom" PlacementRef to 0-LUID 2009-12-13 05:48:05 +01:00
e89b4503fd detect if the session is up and opened, lock PlacementRef else 2009-12-13 04:27:57 +01:00
6c187224eb get it through the compiler again... 2009-12-12 05:03:50 +01:00
5fd2a85400 cleanup of BuilderTool includes 2009-12-12 03:51:26 +01:00
628ad8a31d WIP add a new kind of MObject: the model root 2009-12-12 03:50:41 +01:00
fd782eb139 WIP: change management of test/mock PlacementIndex
now lifecycle of this mock index is managed automatically
from within the session services. This allows to get
rid of the smart-ptr creating factory. As a consequence,
PlacementIndex now resides directly within SessionImpl.
2009-12-11 02:49:12 +01:00
488039c4c6 cleanup and write tests covering the newly implemented stuff 2009-11-28 23:37:58 +01:00
feb4480f85 Scope handling within the PlacementIndex 2009-11-28 22:18:09 +01:00
8a47f1a1ac considerations regarding type handling in the PlacementIndex 2009-11-27 20:30:06 +01:00
66175181dc basically implemented simple element access.
But the scope registration and the type problem remains unsolved
2009-11-27 02:43:09 +01:00
cde45c021e add basic storage and implementation of the PlacementIndex tables 2009-11-27 02:03:20 +01:00
0186343909 finished implementation of QueryFocus (frontend handle) 2009-11-22 11:13:49 +01:00
4082ff919e implemented connection between QueryFocus und current ScopePath 2009-11-22 10:32:08 +01:00
12dc0e2c2d add unit test, write documentation. Closes #420 2009-11-22 07:26:51 +01:00
d90812e64b implement a stack of ScopePath frames 2009-11-22 04:36:14 +01:00
46eae1c03a add a refcount field (for intrusive refcounting) to ScopePath 2009-11-22 03:48:52 +01:00
36e342fc11 Implement ScopePath functionality. Closes #322 2009-11-22 01:16:33 +01:00
27390b5732 add query for path/location to ScopeLocator 2009-11-22 01:15:31 +01:00
c328945cb4 commented the ScopePath API 2009-11-21 21:33:01 +01:00
ed86c97881 Defined/Stubbed all required ScopePath operations 2009-11-21 20:55:14 +01:00
b7987cf3ce define iteration on ScopePath as reverse iteration on the contained Scopes 2009-11-21 04:48:29 +01:00
b2849c6099 defined and implemented equality of scopes 2009-11-21 02:49:24 +01:00
ce98bd9bca Finished basic concept how to establish a current query focus (Ticket #403) 2009-11-20 22:00:15 +01:00
cdb84a9b16 refining the draft for ScopeLocator 2009-11-20 19:58:22 +01:00
11463da463 better use an enum for the ScopeQuery kinds 2009-11-18 04:53:49 +01:00
c01f774344 expose the new query-for-contents facility as session service 2009-11-18 04:23:46 +01:00
9514970b6c refactor most of the session-contents-query impl into a dedicated *.cpp 2009-11-18 04:11:27 +01:00
002a0a97e6 add remaining bits to get query-for-session-contents impl to compile 2009-11-17 03:01:18 +01:00
7d6fa03c51 allow for Goal subclasses to provide copy operations, while prohibiting direct copy 2009-11-15 16:28:42 +01:00
34dc8fa4de mark for later high-level model extension (Ticket #414) 2009-11-15 01:09:21 +01:00
7dcb59333d WIP draft of the complete query-for-session-contents implementation 2009-11-15 01:08:29 +01:00
a10a237b90 rename "MO" --> "MX" to avoid confusion with MObject 2009-11-14 23:07:01 +01:00
017c668d7a WIP outline of the index query resolution 2009-11-13 16:32:22 +01:00
981ea94708 finished the PlacementIndex API. 2009-11-13 04:52:48 +01:00
a1448ed6f6 WIP first attempt to remove the query-interface from PlacementIndex 2009-11-12 20:15:52 +01:00
d658415144 WIP about providing scope contents discovery, backed by the index 2009-11-12 02:15:02 +01:00
bfd97bd98e now SessManagerImpl can go down entirely on implementation level 2009-11-11 06:01:25 +01:00
5535a7a00e phase out the existing access functions, now superseeded by SessionServices 2009-11-11 05:44:58 +01:00
1a76ce7a5f implement two of the SessionServices (internal APIs)
providing implementation-level access to the PlacementIndex
and especially installing a mock index for unit tests
2009-11-11 05:30:24 +01:00
7da8844581 first steps towards using the new SessionServices access mechanism
add the necessary hooks and change the SessionImpl accordingly.
Still using the old access method for any real code
2009-11-09 07:35:08 +01:00
79d5e49a74 defined basic session lifecycle and service access. Closes Ticket #400 2009-11-09 05:21:59 +01:00
043d4f42fa working example implementation of the access mechanism to session internal APIs 2009-11-09 02:08:37 +01:00
2765981db9 build a complete simplified mock Session/SessionManager 2009-11-08 20:13:11 +01:00
f1ce05ea9d clean up some overly clever definitions 2009-11-08 19:47:51 +01:00
aaf19f4d89 First draft regarding the access of session implementation services (Ticket #400) 2009-11-07 19:49:29 +01:00
78f9b2b1c5 WIP refactor ContentsQuery to share implementation with a PathQuery facility 2009-11-07 02:49:55 +01:00
bdb8bc2c98 move PlacementIndex into namespace session 2009-11-06 19:27:53 +01:00
bb8c018214 integrate QueryFocus with the new ContentsQuery facility 2009-11-06 18:42:15 +01:00
e0e9b7c2c0 WIP about how to link the QueryFocus system to the session/PlacementIndex 2009-11-04 04:56:25 +01:00
8c7727704c Finish ContentQuery definition; relying on PlacementIndex 2009-11-02 07:37:15 +01:00
356fe8fd13 change the ContensQuery stub to fit into the QueryResolver in its current form
Actually, the implementation within PlacementIndex is missing.
Moreover, I think now that PlacementIndex shouldn't implement
QueryResolver directly.
2009-11-01 03:47:35 +01:00
9ff7b1eaeb Implement registration of a resolution function. QueryResolver_test pass 2009-10-30 20:33:44 +01:00
f70f8c4e4a implemented the mechanism for dispatch-to-concrete resolution 2009-10-30 18:37:08 +01:00
d2721378d5 get QueryResolver to compile 2009-10-29 21:59:02 +01:00
54aa7b4afe WIP fixes and stubbing to get at compiling the MultiFact 2009-10-29 04:32:00 +01:00
ec4b2eef00 WIP: test-driven brainstorming: how to build the query dispatcher table? 2009-10-26 01:39:25 +01:00
5968d35cdf WIP maybe resolved now the knot in my design...? 2009-10-25 21:39:02 +01:00
5d9671cb2c WIP place a ref-count into the result iterator 2009-10-25 16:18:53 +01:00
c3441ac26a WIP Query<TY> implementation draft... 2009-10-24 00:23:22 +02:00
452e1bb727 WIP draft an unit test detailing QueryFocus operation 2009-10-20 05:34:58 +02:00
f01da49955 WIP planning the operations needed on QueryFocus 2009-10-20 04:31:50 +02:00
f0c9beb5c6 WIP design the ScopePath API by unit test 2009-10-18 19:08:21 +02:00
474c293197 first shot at Ticket #355: use a default-constructed "invalid" PlacementRef
Making PlacementRef default constructible this way
would resolve the immediate problems; as any access
goes through an index lookup and thus will throw.
The bool check on this special ref yields false,
so this solution seems to fill the bill.
2009-10-18 01:30:43 +02:00
2e62a3b01b WIP continue design how to discover session contents 2009-10-17 21:31:03 +02:00
2ca89010d1 introduce pointer-to-PlacementIndex typedef 2009-10-17 21:29:16 +02:00
3b1301be14 WIP stubbed some of the operations to implement on class Scope 2009-10-17 02:16:19 +02:00
cfc17e75ba refined and clarified planning of Scope and QueryFocus 2009-10-16 21:20:30 +02:00
9451a6888f start definition of new session::Scope interface 2009-10-16 03:13:57 +02:00
edbd54b062 Initial planning regaring the QueryFocus 2009-10-14 05:48:24 +02:00
193fd2d66b Start the new Session structure with Timeline and Sequences 2009-10-14 05:39:49 +02:00
8c21f21acc namespace cleanup: bring Singleton and Factory into lib:: 2009-10-11 05:57:41 +02:00
18c357eb4a start using Symbol datatype instead of a disguised char* 2009-10-11 05:57:38 +02:00
6fc7aedd95 Merge NoBug-release related additions
Merge branch 'master' into builder
2009-09-05 19:16:13 +02:00
70b4b0ad41 Fix some more format warnings 2009-09-05 19:11:17 +02:00
1969adaf02 Integration of Builder/NodeFactory implementation draft. Stubbed to pass compiler 2009-09-05 18:15:58 +02:00
1430965798 WIP: implementation of a node fabrication code path 2009-09-05 04:10:51 +02:00
32612a1a97 WIP: link between asset::Proc and the Build process, allowing to resolve the processing function 2009-09-05 03:04:00 +02:00
99310dc0af WIP: continue with considerations how actually to build and wire an individual ProcNode 2009-08-29 18:33:46 +02:00
6da18f76c0 re-read the code, some cleanup, define Tickets... 2009-08-29 16:13:42 +02:00
3ef03bc3c0 WIP adjust fixture, segments and segmentation 2009-08-29 13:27:47 +02:00
9269db45cc WIP rename class Processor to RenderGraph (engine) 2009-08-29 13:19:43 +02:00
2b3fd7ef1b WIP backbone of the builder 2009-08-29 13:06:59 +02:00
091181bbbc spell checks (and read the code again...) 2009-08-29 13:06:59 +02:00
ff8be4493c WIP get rid of some cruft and placeholders 2009-08-29 13:02:26 +02:00
97ee7a95ea WIP try to get grip at the actual node creation...
determining the right context for node creation to happen
2009-08-29 12:26:47 +02:00
06000769e2 re-read the code concerning the pull()-call, fix obvious mismatches, comment, plan... 2009-08-29 12:23:41 +02:00
1b4aa98cdf use the new stream type definitions to get ahead with the builder work 2009-08-29 12:19:26 +02:00
9f40e4af9c implemented definition and access of handling patterns 2009-08-09 21:55:47 +02:00
2e58611e2d define session lifecycle event IDs 2009-08-09 19:22:07 +02:00
fba135c746 Merge backend and testsuite improvements 2009-06-19 01:19:20 +02:00
102e96891b fixing, stubbing, and some chainsaw surgery to get half-finished code through the compiler 2009-06-09 09:05:19 +02:00
2731e34c3e WIP: test driven brainstorming: basic MObjectRef behaviour 2009-06-07 00:45:55 +02:00
091c3a20ef fix indentation 2009-06-06 23:58:44 +02:00
ee7f2d6c0f WIP: replace direct ctor call by an embedded factory member 2009-06-06 07:12:09 +02:00
815f8569ce WIP: accessing the default PlacementIndex (within the Session) 2009-06-06 06:18:37 +02:00
fa31f3736e WIP some details regarding PlacementRef 2009-06-06 04:23:11 +02:00
4ee0b18731 Fix: activation of MObjectRef, exception safety 2009-06-06 04:04:33 +02:00
638022c07f WIP: add run-time type check API to Placement 2009-06-06 04:02:08 +02:00
8a453bd52b WIP: start drafing MObjectRef 2009-06-02 03:31:52 +02:00
1f4676e7b6 cleanup old ID definiton now superseeded by hash-ID 2009-05-31 05:14:23 +02:00
d49eea6e5d finished reworking Placement (hierarchy and ID) 2009-05-31 05:02:03 +02:00
20a1268683 recast the PlacementHierarchy_test to use the real Placement/MObject hierarchy 2009-05-29 23:13:56 +02:00
50a42e5104 extract dummy MObject hierarchy for unit tests 2009-05-29 22:12:12 +02:00
014b6c0b49 intend to use the time wrapper 2009-05-29 19:03:34 +02:00
940d63a9fa time wrapper minimal test coverage 2009-05-29 18:36:37 +02:00
efa7b4717c rework placement to contain a LUID, and to deal with inheritance according to the concept draft 2009-05-29 07:10:54 +02:00
003895b08d considering how to bring the new hash ID into Placement.
Which in turn is required for the Placement/MObject ref and the Placement index
2009-05-24 19:34:47 +02:00
020636b90a WIP extract the hash ID draft into separate header & test 2009-05-22 02:40:20 +02:00